Bonjour, En bref, mon pb est comment remplacer des charactères non utf8 avec sed ? En moins bref : J'ai un script pour nettoyer des noms de fichiers, mais je viens de constater que s'il y a un pb d'encodage dans le nom, ça passe au travers. Par exemple, sur un système en utf8, le sed suivant ne fait rien echo tést|iconv -t ISO8859-1 -f utf8|sed -e 's/[^a-z0-9_\-\.]/_/g;' alors que j'attendais naïvement t_st. Un moyen de remplacer tout ce qui ne serait pas a-z0-9_ en utf8 par _ ? -- Daniel
echo tést|iconv -t ISO8859-1 -f utf8|sed -e 's/[^a-z0-9_\-\.]/_/g;'
je te conseille l'option translit de iconv : echo tést|iconv -t ascii//translit -f utf8 sinon tu as des outils comme convmv M. -- Emmanuel Bouthenot mail : kolter@openics.org gpg : 0x414EC36E jid : kolter@im.openics.org irc : kolter@(freenode|oftc)
Emmanuel Bouthenot a écrit :
echo tést|iconv -t ISO8859-1 -f utf8|sed -e 's/[^a-z0-9_\-\.]/_/g;'
je te conseille l'option translit de iconv :
echo tést|iconv -t ascii//translit -f utf8
le "echo tést|iconv -t ISO8859-1 -f utf8" n'est là que pour pouvoir donner des caractères iso à sed ;-), pour tester. Mon pb est que mon script sed est censé fonctionner avec des chaines UTF8, mais qu'il peut arriver par erreur que ce soit de l'iso (ou n'importe quoi d'autre). Et dans ce cas ça passe au travers sans signaler d'erreur.
sinon tu as des outils comme convmv
Oui, mais il faut connaitre l'encodage de départ. Comme en théorie c'est de l'utf8... normalement pas besoin. Je pourrais essayer de le faire tourner en n-importe_quoi->utf8 et vérifier que je n'ai que du "Skipping, already UTF-8" mais c'est vraiment bourrin car à priori inutile dans 99,9% des cas. C'est pour ça que je pensais utiliser sed pour remplacer tous les caractères non utf8 sans me poser de question. Mais au départ, c'est surtout comprendre pourquoi un caractère iso affiché en UTF8 (�) ne match pas avec le pattern [^a-z0-9_\-\.] ? -- Daniel
participants (2)
-
Daniel Caillibaud
-
Emmanuel Bouthenot