cat yourfile.txt | tr -dc '[:alnum:]\n\r' | tr '[:upper:]' '[:lower:]'
Il primo tr
cancella i caratteri speciali. d
significa eliminare, c
significa complemento (inverte il set di caratteri). Quindi, -dc
significa eliminare tutti i caratteri tranne quelli specificati. Il \n
e \r
sono inclusi per preservare le nuove righe in stile Linux o Windows, che presumo tu voglia.
Il secondo traduce i caratteri maiuscoli in minuscoli.
Soluzione BASH 4+ pura:
$ filename='Some_randoM data1-A'
$ f=${filename//[^[:alnum:]]/}
$ echo "$f"
SomerandoMdata1A
$ echo "${f,,}"
somerandomdata1a
Una funzione per questo:
clean() {
local a=${1//[^[:alnum:]]/}
echo "${a,,}"
}
Provalo:
$ clean "More Data0"
moredata0
se stai usando l'approccio mkelement0 e Dan Bliss. Puoi anche esaminare l'espressione regolare sed + POSIX.
cat yourfile.txt | sed 's/[^a-zA-Z0-9]//g'
Sed trova tutti gli altri caratteri che non sono contenuti tra parentesi eccetto lettere e numeri e li rimuove.
Ho usato tr
per rimuovere tutti i caratteri che non fanno parte di [:print:]
classe
cat file.txt | tr -dc '[:print:]'
o
echo "..." | tr -dc '[:print:]'
Inoltre potresti voler |
(convoglia) l'output in od -c
per confermare il risultato
cat file.txt | tr -dc '[:print:]' | od -c