cat yourfile.txt | tr -dc '[:alnum:]\n\r' | tr '[:upper:]' '[:lower:]'
El primer tr
elimina caracteres especiales. d
significa borrar, c
significa complemento (invertir el conjunto de caracteres). Entonces, -dc
significa eliminar todos los caracteres excepto los especificados. El \n
y \r
se incluyen para preservar las líneas nuevas de estilo de Linux o Windows, que supongo que desea.
El segundo traduce los caracteres de mayúsculas a minúsculas.
Solución BASH 4+ pura:
$ filename='Some_randoM data1-A'
$ f=${filename//[^[:alnum:]]/}
$ echo "$f"
SomerandoMdata1A
$ echo "${f,,}"
somerandomdata1a
Una función para esto:
clean() {
local a=${1//[^[:alnum:]]/}
echo "${a,,}"
}
Pruébalo:
$ clean "More Data0"
moredata0
si está utilizando mkelement0 y el enfoque de Dan Bliss. También puede consultar la expresión regular sed + POSIX.
cat yourfile.txt | sed 's/[^a-zA-Z0-9]//g'
Sed coincide con todos los demás caracteres que no están entre corchetes, excepto letras y números, y los elimina.
He usado tr
para eliminar cualquier carácter que no sea parte de [:print:]
clase
cat file.txt | tr -dc '[:print:]'
o
echo "..." | tr -dc '[:print:]'
Además, es posible que desee |
(tubería) la salida a od -c
para confirmar el resultado
cat file.txt | tr -dc '[:print:]' | od -c