Найти и заменить регулярное выражение (соответствующий классу символов Unicode Devanagari) в нескольких файлах

Скажем, у вас есть файл с именем test.txt со следующими строками:

ಕದಂಬ
कदम्ब

Затем предположим, что вы хотите заменить каждый символ деванагари Unicode (т.е. в in) на D. Затем вы можете подумать, что будет работать следующее:

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

Но это не так. Как это сделать?

1 ответ

Решение

Как предполагает Steeldriver, вы можете заставить оба STDIN/STDOUT быть UTF-8:

-C сам по себе (без какого-либо числа или списка опций) или пустая строка "" для переменной среды PERL_UNICODE, имеет тот же эффект, что и -CSDL. Другими словами, стандартные дескрипторы ввода-вывода и уровень open() по умолчанию являются UTF-8, но только если переменные окружения локали указывают локаль UTF-8.

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

Преобразует ваш пример файла следующим образом:

ಕದಂಬ
DDDDD

Источник: http://perldoc.perl.org/perlrun.html

Другие вопросы по тегам