cat yourfile.txt | tr -dc '[:alnum:]\n\r' | tr '[:upper:]' '[:lower:]'
Le premier tr
supprime les caractères spéciaux. d
signifie supprimer, c
signifie complément (inverser le jeu de caractères). Donc, -dc
signifie supprimer tous les caractères sauf ceux spécifiés. Le \n
et \r
sont inclus pour préserver les retours à la ligne de style Linux ou Windows, ce que je suppose que vous voulez.
Le second traduit les caractères majuscules en minuscules.
Solution BASH 4+ pure :
$ filename='Some_randoM data1-A'
$ f=${filename//[^[:alnum:]]/}
$ echo "$f"
SomerandoMdata1A
$ echo "${f,,}"
somerandomdata1a
Une fonction pour cela :
clean() {
local a=${1//[^[:alnum:]]/}
echo "${a,,}"
}
Essayez-le :
$ clean "More Data0"
moredata0
si vous utilisez l'approche mkelement0 et Dan Bliss. Vous pouvez également consulter l'expression régulière sed + POSIX.
cat yourfile.txt | sed 's/[^a-zA-Z0-9]//g'
Sed correspond à tous les autres caractères qui ne sont pas contenus entre crochets, à l'exception des lettres et des chiffres, et supprimez-les.
J'ai utilisé tr
pour supprimer tous les caractères qui ne font pas partie de [:print:]
classe
cat file.txt | tr -dc '[:print:]'
ou
echo "..." | tr -dc '[:print:]'
De plus, vous voudrez peut-être |
(diriger) la sortie vers od -c
pour confirmer le résultat
cat file.txt | tr -dc '[:print:]' | od -c