Wie kann ich Nicht-ASCII-Zeichen aus der Shell identifizieren?

12

Gibt es eine einfache Möglichkeit , alle Nicht-ASCII - Zeichen und die Zeilennummern , auf die sie in einer Datei mit einem Kommandozeilenprogramm wie auftreten zu drucken grep, awk, perl, etc?

Ich möchte die Codierung einer Textdatei von UTF-8 in ASCII ändern, möchte jedoch zuvor alle Instanzen von Nicht-ASCII-Zeichen manuell ersetzen, um unerwartete Zeichenänderungen durch die Dateikonvertierungsroutine zu vermeiden.

user001
quelle

Antworten:

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

oder

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

wo utf8.txt ist

$ cat utf8.txt
To be or not to be.
Pour être ou ne pas être
Om of niet zijn
Byť či nebyť
是或不
RedGrittyBrick
quelle
1
Vielen Dank. Das Perl-Snippet funktioniert direkt, aber die Grep-Version funktioniert nicht mit GNU Grep 2.16. Ich konnte es über: zum LC_ALL=C grep -n -P [$'\x80'-$'\xFF']Laufen bringen, wo das erste Bit die Kollatierung ausschaltet.
Joe Corneli
4

Ich möchte die Codierung einer Textdatei von UTF-8 auf ASCII ändern ...

... alle Instanzen von Nicht-ASCII-Zeichen ersetzen ...

Weisen Sie dann Ihr Konvertierungstool an, dies zu tun.

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

$ iconv -c -f UTF-8 -t ASCII//translit <<< 'áēìöų'
aeiou
Ignacio Vazquez-Abrams
quelle
Er sagte, er wolle diesen Ersatz manuell durchführen. Möglicherweise ist der am besten geeignete Ersatz kontextabhängig.
Mark4o