Je veux nettoyer certaines entrées et remplacer plusieurs caractères par des entrées acceptables, par exemple un danois 'å
' avec 'aa
'.
Cela se fait facilement en utilisant plusieurs instructions, par exemple /æ/ae/
, /å/aa/
, /ø/oe/
, Mais en raison des limitations de l'outil, je veux pouvoir le faire en une seule expression régulière.
Je peux attraper tous les cas pertinents (/[(æ)(ø)(å)(Æ)(Ø)(Å)]/
) mais mon remplacement ne fonctionne pas comme je le veux (mais probablement complètement comme prévu):
$ temp="RødgrØd med flæsk"
$ echo $temp
RødgrØd med flæsk
$ echo $temp | sed 's/[(æ)(ø)(å)(Æ)(Ø)(Å)]/(ae)(oe)(aa)(Ae)(Oe)(Aa)/g'
R(ae)(oe)(aa)(Ae)(Oe)(Aa)dgr(ae)(oe)(aa)(Ae)(Oe)(Aa)d med fl(ae)(oe)(aa)(Ae)(Oe)(Aa)sk
(la première ligne d'écho est de montrer que ce n'est pas un problème d'encodage)
Soit dit en passant, le problème de l'outil est que je voudrais également utiliser la même expression régulière dans un extrait de texte sublime 2 .
Quelqu'un est-il capable de discerner ce qui ne va pas avec ma déclaration regex?
Merci d'avance.
Divisez-le en plusieurs instructions sed
, séparées par ;
:
sed 's/æ/ae/g;s/ø/oe/g;s/å/aa/g;s/Æ/Ae/g;s/Ø/Oe/g;s/Å/Aa/g'
Avec
sed -e 's/Find/Replace/g;s/Find/Replace/g;[....];/Find/Replace/g'
vous ferez l'affaire.
Alors traduisez ce dont vous avez besoin
sed -e 's/æ/ae/g;s/ø/oe/g;s/å/aa/g;s/Æ/Ae/g;s/Ø/Oe/g;s/Å/Aa/g'
Cela pourrait fonctionner pour vous (GNU sed):
sed -r 's/$/\næaeøoeåaaÆAeØOeÅAa/;:a;s/([æøåÆØÅ])(.*\n.*\1(..))/\3\2/;ta;s/\n.*//' file
Il fonctionne en ajoutant une table de recherche à la fin de la ligne, en boucle jusqu'à ce que toutes les clés soient remplacées, puis supprime la table de recherche.