Como posso identificar caracteres não ASCII do shell?

12

Existe uma maneira simples para imprimir todos os caracteres não-ASCII e os números de linha em que eles ocorrem em um arquivo usando um utilitário de linha de comando, como grep, awk, perl, etc?

Quero alterar a codificação de um arquivo de texto de UTF-8 para ASCII, mas antes de fazer isso, desejo substituir manualmente todas as instâncias de caracteres não ASCII para evitar alterações inesperadas de caracteres efetuadas pela rotina de conversão de arquivos.

user001
fonte

Respostas:

13
$ perl -ne 'print "$. $_" if m/[\x80-\xFF]/'  utf8.txt
2 Pour être ou ne pas être
4 Byť či nebyť
5 是或不

ou

$ grep -n -P '[\x80-\xFF]' utf8.txt
2:Pour être ou ne pas être
4:Byť či nebyť
5:是或不

onde utf8.txt é

$ cat utf8.txt
To be or not to be.
Pour être ou ne pas être
Om of niet zijn
Byť či nebyť
是或不
RedGrittyBrick
fonte
1
Obrigado. O fragmento de perl funciona diretamente, mas a versão grep não funciona com o GNU grep 2.16. Consegui fazê-lo funcionar via:, LC_ALL=C grep -n -P [$'\x80'-$'\xFF']onde o primeiro bit desativa o agrupamento.
1811 Joe Corneli
4

Quero alterar a codificação de um arquivo de texto de UTF-8 para ASCII ...

... substitua todas as instâncias de caracteres não ASCII ...

Em seguida, diga à sua ferramenta de conversão.

$ iconv -c -f UTF-8 -t ASCII <<< 'Look at 私.'
Look at .

$ iconv -c -f UTF-8 -t ASCII//translit <<< 'áēìöų'
aeiou
Ignacio Vazquez-Abrams
fonte
Ele disse que queria fazer essa substituição manualmente. Talvez a substituição mais apropriada seja dependente do contexto.
mark4o