Question Rechercher et remplacer les expressions régulières (correspondant à la classe de caractères unicode Devanagari) dans plusieurs fichiers


Disons que vous avez un fichier nommé test.txt avec les lignes suivantes:

ಕದಂಬ
कदम्ब

Supposons ensuite que vous souhaitiez remplacer chaque caractère unicode devanagarI (c'est-à-dire dans कदम्ब) par un D. Ensuite, vous pourriez penser que les éléments suivants fonctionneraient:

find . -name 'test.*' | xargs perl -w -i -p -e 's/(\p{Devanagari})/D/g'

Mais ce n'est pas le cas. Comment accomplir cela?


1
2018-03-25 01:43


origine


Vous devrez peut-être utiliser le -C option de ligne de commande ou définir un vide PERL_UNICODE= variable: voir le documentation perlrun. - steeldriver


Réponses:


Comme suggéré par steeldriver, vous pouvez forcer STDIN / STDOUT à être UTF-8:

-C seul (non suivi par un numéro ou une liste d'options) ou la chaîne vide "" pour la variable d'environnement PERL_UNICODE, a la   Même effet que -CSDL. En d'autres termes, les poignées d'E / S standard et les   la couche open () par défaut est UTF-8-fied mais seulement si l'environnement local   les variables indiquent une locale UTF-8.

find . -name 'test.*' 2>/dev/null | xargs perl -w -C -i -p -e 's/(\p{Devanagari})/D/g'

Transformez votre fichier d'exemple comme ceci:

ಕದಂಬ
DDDDD

La source: http://perldoc.perl.org/perlrun.html#Command-Switches


3
2018-03-25 08:06