Encontre e substitua a expressão regular (correspondendo a classe de caracteres unicode Devanagari) em múltiplos arquivos

1

Digamos que você tenha um arquivo chamado test.txt com as seguintes linhas:

ಕದಂಬ
कदम्ब

Em seguida, suponha que você queira substituir cada caractere unicode devanagarI (ou seja, em कदम्ब) por um D. Então, você pode pensar que o seguinte funcionaria:

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

Mas isso não acontece. Como conseguir isso?

    
por vishvAs vAsuki 25.03.2015 / 02:43

1 resposta

3

Como sugerido pela steeldriver, você pode forçar o STDIN / STDOUT a ser UTF-8:

  

-C por conta própria (não seguido por qualquer número ou lista de opções), ou a cadeia vazia "" para a variável de ambiente PERL_UNICODE, tem o   mesmo efeito que -CSDL. Em outras palavras, as alças padrão de E / S e as   camada padrão open () é UTF-8-fied mas somente se o ambiente local   variáveis indicam uma localidade UTF-8.

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

Transformará seu arquivo de amostra assim:

ಕದಂಬ
DDDDD

Fonte: link

    
por Sylvain Pineau 25.03.2015 / 09:06