Bash : Suppression des accents, cédilles, etc

Print Friendly, PDF & Email
Comment supprimer les accents, cédilles, etc, dans une chaine de caractères ?

Méthode classique : la substitution

La suppression des caractères accentués et autres cédilles peut être effectuée, en Bash, en utilisant “sed” ou “tr” :

fhh@aaricia ~ $ _str="Une chaine avec des é, des Ù, des À, des ç et des œ"
fhh@aaricia ~ $ echo $_str | sed 'y/áàâäçéèêëîïìôöóùúüñÂÀÄÇÉÈÊËÎÏÔÖÙÜÑ/aaaaceeeeiiiooouuunAAACEEEEIIOOUUN/'
Une chaine avec des e, des U, des A, des c et des œ

La méthode est fonctionnelle mais sous entend que tous les caractères à substituer aient été définis. Dans l’exemple, le “œ” n’a pas été remplacé car aucun caractère de remplacement ne lui est alloué.

Autre problème de cette méthode, remplacer une lettre par deux autres tel que “œ” par “oe” ou le “ß” allemand par “ss” nécessite la définition de règles particulières à chaque cas.

Ce sont ces raisons qui nous poussent à éviter cette méthode au profit de la conversion de chaines de caractères.

Méthode recommandée : la conversion

Plus complète, la méthode de conversion présente en sus l’avantage d’être plus concise.

“iconv” est utilisé pour “convertir” la chaine de caractères du format de base, UTF-8 dans l’exemple (option “-f” pour “from”), vers le format ASCII (option “-t” pour “to”).

Avec l’option “TRANSLIT”, si un caractère ne peut être transcrit dans le format de destination, il est converti en une chaine de caractère équivalente.

fhh@aaricia ~ $ _str="Une chaine avec des é, des Ù, des À, des çÇ et des œ"
fhh@aaricia ~ $ echo $_str | iconv -f utf8 -t ascii//TRANSLIT
Une chaine avec des e, des U, des A, des cC et des oe
La méthode fonctionne sur un large panel de caractères :

et peut être utilisée sur des fichiers :

fhh@aaricia ~ $ cat myfile.txt 
Une chaine avec des é, des Ù, des À, des ç et des œ
 
et même des "ß"
fhh@aaricia ~ $ iconv -f utf8 -t ascii//TRANSLIT < myfile.txt > noaccents.txt
fhh@aaricia ~ $ cat noaccents.txt 
Une chaine avec des e, des U, des A, des c et des oe
 
et meme des "ss"

Related Post