Найти и заменить регулярное выражение (соответствующий классу символов 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