Bagaimana saya bisa mengidentifikasi karakter non-ASCII dari shell?

12

Apakah ada cara sederhana untuk mencetak semua karakter non-ASCII dan nomor baris di mana mereka terjadi pada file menggunakan perintah utilitas baris seperti grep, awk, perl, dll?

Saya ingin mengubah penyandian file teks dari UTF-8 ke ASCII, tetapi sebelum melakukannya, ingin secara manual mengganti semua instance karakter non-ASCII untuk menghindari perubahan karakter yang tidak terduga yang dipengaruhi oleh rutin konversi file.

user001
sumber

Jawaban:

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

atau

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

di mana utf8.txt berada

$ cat utf8.txt
To be or not to be.
Pour être ou ne pas être
Om of niet zijn
Byť či nebyť
是或不
RedGrittyBrick
sumber
1
Terima kasih. Cuplikan perl bekerja secara langsung, tetapi versi grep tidak bekerja dengan GNU grep 2.16. Saya bisa membuatnya bekerja melalui LC_ALL=C grep -n -P [$'\x80'-$'\xFF']:, di mana bit pertama mematikan pemeriksaan.
Joe Corneli
4

Saya ingin mengubah penyandian file teks dari UTF-8 ke ASCII ...

... ganti semua instance karakter non-ASCII ...

Kemudian beri tahu alat konversi Anda untuk melakukannya.

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

$ iconv -c -f UTF-8 -t ASCII//translit <<< 'áēìöų'
aeiou
Ignacio Vazquez-Abrams
sumber
Dia mengatakan ingin melakukan penggantian itu secara manual. Mungkin penggantian yang paling tepat tergantung pada konteks.
mark4o