Como faço perl
para substituir corretamente o caractere UTF-8 de um shell?
Os exemplos usam stdin, mas preciso de algo que funcione perl ... file
também.
Isto é o que eu espero:
$ echo ABCæøåDEF | perl -CS -pe "s/([æøå])/[\\1]/g"
ABC[æ][ø][å]DEF
Isto é o que eu recebo:
$ echo ABCæøåDEF | perl -CS -pe "s/([æøå])/[\\1]/g"
ABCæøåDEF
Substituir os caracteres Unicode por ASCII funciona instantaneamente:
$ echo ABC123DEF | perl -CS -pe "s/([123])/[\\1]/g"
ABC[1][2][3]DEF
Meu ambiente:
perl 5.18.2
Bash 3.2.57
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
Usa isto :
Funciona também para arquivos
Resultado :
Observação :
\\1
é para awk ,\1
é para sed e em perl usamos$1
perldoc perlrun
há-CSD
truques utf8Sua entrada:
Uma boa maneira de IMO é a
-C
opção maisutf8
:Se você não quiser usar UTF-8 na linha de comando, sempre poderá escrever seu código Perl em ASCII simples e usar escapes como
\xAB
,\x{ABCD}
ou em Perls mais recentes\N{U+ABCD}
ou\N{CHARNAME}
:Este está ficando um pouco criativo:
@ARGV
será interpretado como UTF-8, então você pode manter seu código-fonte como ASCII e passar os caracteres UTF-8 por meio de um argumento de linha de comando (não necessariamente a melhor solução, apenas mostrando como você pode fazer uso da-CA
opção):Ou, claro, você sempre pode transformar o oneliner em um script real, onde você pode
Leitura adicional: perlunitut , perlunifaq , perluniintro , perlunicode , perlunicook .
$ echo 'ABCæøåDEF' | perl -CS -Mutf8 -pe 's/([æøå])/[$1]/g'