ฉันจะระบุอักขระที่ไม่ใช่ ASCII จากเชลล์ได้อย่างไร


13

มีวิธีง่ายๆในการพิมพ์ทั้งหมดอักขระที่ไม่ใช่ ASCII และหมายเลขบรรทัดที่พวกเขาเกิดขึ้นในไฟล์โดยใช้อรรถประโยชน์บรรทัดคำสั่งเช่นgrep, awk, perletc?

ฉันต้องการเปลี่ยนการเข้ารหัสของไฟล์ข้อความจาก 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 เวอร์ชันไม่ทำงานกับ GNU grep 2.16 ฉันสามารถทำให้มันทำงานผ่าน: LC_ALL=C grep -n -P [$'\x80'-$'\xFF']ที่บิตแรกปิดการเปรียบเทียบ
Joe Corneli

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.