Як я можу ідентифікувати символи, що не належать до ASCII, з оболонки?


13

Є простий спосіб надрукувати все символом не-ASCII і номера рядків , на яких вони відбуваються в файл з допомогою утиліти командного рядка , таких як grep, awk, perlі т.д.?

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

Відповіді:


14
$ 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 не працює з grep GNU 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.