GNU/Linux >> Tutoriels Linux >  >> Linux

Supprimez tous les caractères spéciaux et la casse de la chaîne dans bash

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

Linux
  1. Script Bash pour supprimer le fichier le plus ancien d'un dossier ?

  2. Imprimer une chaîne comprenant des guillemets simples et d'autres caractères spéciaux ?

  3. linux bash, chaîne de casse camel à séparer par un tiret

  4. Teste si la chaîne contient des caractères non blancs dans Bash

  5. Comment grep une chaîne dans un répertoire et tous ses sous-répertoires ?

Syntaxe de l'instruction bash case et exemples

Comment supprimer les caractères (^M) d'un fichier sous Linux

Comment supprimer tous les espaces blancs d'un fichier texte

Comment supprimer tous les répertoires .svn de mes répertoires d'application

créer un répertoire à partir du nom de fichier et déplacer bash

Comment renommer tous les fichiers avec des caractères spéciaux et des espaces dans un répertoire ?