Você precisa dizer ao perl que o corpo do script contém caracteres UTF8:
$ perl -w -C -p -e 's/(\p{Devanagari})\./।/g' test.txt
ಕದಂ.ಬ
कदम्ब।
$ perl -Mutf8 -w -C -p -e 's/(\p{Devanagari})\./।/g' test.txt
ಕದಂ.ಬ
कदम्ब।
Digamos que você tenha um arquivo chamado test.txt
com as seguintes linhas:
ಕದಂ.ಬ
कदम्ब.
Então, suponha que você queira substituir cada ponto seguindo um caractere unicode devanagarI (isto é, em कदम्ब) com um ।. Então, você pode pensar que o seguinte funcionaria:
find . -name 'test.*' | xargs perl -w -i -C -p -e 's/(\p{Devanagari})\./।/g'
Mas isso não acontece (vejo o ponto no final substituído por à ¥ ¤).
Como corrigir o problema acima?
Editar: O abaixo funciona, mas eu queria algo mais legível:
find . -name 'test*'|xargs perl -C -w -i -p -e 's/(\p{Devanagari})\./\x{0964}/g'
(Este é um seguimento para esta questão .
Você precisa dizer ao perl que o corpo do script contém caracteres UTF8:
$ perl -w -C -p -e 's/(\p{Devanagari})\./।/g' test.txt
ಕದಂ.ಬ
कदम्ब।
$ perl -Mutf8 -w -C -p -e 's/(\p{Devanagari})\./।/g' test.txt
ಕದಂ.ಬ
कदम्ब।