Supprime tous les caractères spéciaux et cas de la chaîne dans bash
Je suis en train d'écrire un script bash qui doit analyser les noms de fichiers.
Il sera nécessaire de supprimer tous les caractères spéciaux (y compris l'espace de): "!?.-_ et changer toutes les majuscules en minuscules. Quelque chose comme ceci:
Some_randoM data1-A
More Data0
:
somerandomdata1a
moredata0
J'ai vu beaucoup de questions à faire dans beaucoup de différents langages de programmation, mais pas dans bash. Est-il une bonne façon de le faire?
source d'informationauteur Questionmark
Vous devez vous connecter pour publier un commentaire.
La première
tr
supprime les caractères spéciaux.d
delete,c
moyens complémentaires (inverser le jeu de caractères). Donc,-dc
signifie effacer tous les caractères, sauf celles indiquées. Le\n
et\r
sont inclus afin de préserver linux ou windows style des retours à la ligne, je suppose que vous voulez.Le second se traduit par des caractères en majuscules aux minuscules.
Pur bash solution:
Une fonction pour ça:
Essayer:
si vous utilisez mkelement0 et Dan la Félicité de l'approche. Vous pouvez aussi regarder sed + POSIX expression régulière.
Sed correspond à tous les autres personnages qui ne sont pas contenues dans des crochets à l'exception des lettres et de chiffres et de les supprimer.
J'ai utilisé
tr
pour supprimer tous les caractères qui ne font pas partie de[:print:]
classeou
En outre, vous pourriez vouloir
|
(pipe) de la sortie deod -c
pour confirmer le résultat