Linha de comando perl regex replacement: string de substituição contém utf8

1

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 .

    
por vishvAs vAsuki 25.03.2015 / 19:17

1 resposta

1

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
ಕದಂ.ಬ
कदम्ब।
    
por glenn jackman 25.03.2015 / 21:28