Замена регулярного выражения Perl в командной строке: строка замены содержит utf8

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

ಕದಂ.ಬ
कदम्ब.

Затем предположим, что вы хотите заменить каждую точку, следующую за символом юникода devanagarI (то есть в कदम्ब), на।. Тогда вы можете подумать, что будет работать следующее:

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

Но это не так (я вижу точку в конце, замененную на ¥ ¥ ¤).

Как исправить вышесказанное?

Редактировать: ниже работает, но я хотел что-то более читабельное:

find . -name 'test*'|xargs perl -C -w -i -p -e 's/(\p{Devanagari})\./$1\x{0964}/g'

(Это продолжение до этот вопрос .)

1
задан 13 April 2017 в 15:25

1 ответ

Необходимо сказать жемчугу, что тело сценария содержит символы UTF8:

$ perl -w -C -p -e 's/(\p{Devanagari})\./$1।/g' test.txt
ಕದಂ.ಬ
कदम्ब।

$ perl -Mutf8 -w -C -p -e 's/(\p{Devanagari})\./$1।/g' test.txt
ಕದಂ.ಬ
कदम्ब।
1
ответ дан 13 April 2017 в 15:25

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

Похожие вопросы: