Как я могу определить не-ASCII символы из оболочки?


11

Есть простой способ напечатать все символы не-ASCII и номера строк , на которых они происходят в файле с помощью утилиты командной строки , такие как grep, awk, perlи т.д.?

Я хочу изменить кодировку текстового файла с UTF-8 на ASCII, но перед этим я хочу вручную заменить все экземпляры не-ASCII символов, чтобы избежать неожиданных изменений символов, вызванных процедурой преобразования файлов.

Ответы:


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

или же

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

где utf8.txt

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

1
Благодарю. Фрагмент perl работает напрямую, но версия grep не работает с GNU grep 2.16. Я смог заставить его работать через:, LC_ALL=C grep -n -P [$'\x80'-$'\xFF']где первый бит отключает сортировку.
Джо Корнели

4

Я хочу изменить кодировку текстового файла с UTF-8 на ASCII ...

... заменить все экземпляры не-ASCII символов ...

Затем скажите вашему инструменту конвертации, чтобы сделать это.

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

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

Он сказал, что хочет сделать эту замену вручную. Возможно, наиболее подходящая замена зависит от контекста.
mark4o
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.