¿Cómo puedo identificar caracteres no ASCII del shell?


12

¿Hay una forma sencilla de imprimir todos los caracteres no ASCII y los números de línea en el que ocurren en un archivo mediante una utilidad de línea de comandos como grep, awk, perl, etc?

Quiero cambiar la codificación de un archivo de texto de UTF-8 a ASCII, pero antes de hacerlo, deseo reemplazar manualmente todas las instancias de caracteres no ASCII para evitar cambios inesperados de caracteres efectuados por la rutina de conversión de archivos.

Respuestas:


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

o

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

donde utf8.txt es

$ cat utf8.txt
To be or not to be.
Pour être ou ne pas être
Om of niet zijn
Byť či nebyť
是或不

1
Gracias. El fragmento de Perl funciona directamente, pero la versión grep no funciona con GNU grep 2.16. Pude hacerlo funcionar a través de:, LC_ALL=C grep -n -P [$'\x80'-$'\xFF']donde el primer bit desactiva la intercalación.
Joe Corneli

4

Quiero cambiar la codificación de un archivo de texto de UTF-8 a ASCII ...

... reemplazar todas las instancias de caracteres no ASCII ...

Luego dígale a su herramienta de conversión que lo haga.

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

$ iconv -c -f UTF-8 -t ASCII//translit <<< 'áēìöų'
aeiou

Dijo que quería hacer ese reemplazo manualmente. Quizás el reemplazo más apropiado depende del contexto.
mark4o
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.