grep: ค้นหาทุกบรรทัดที่มีตัวอักษรคันจิญี่ปุ่น


14

ในแฟ้มข้อความขนาดใหญ่ UTF-8 ผมต้องการที่จะแสดงให้ทุกบรรทัดที่ประกอบด้วยญี่ปุ่นkanjis
อะไรgrep(หรืออื่น ๆ ) ไม่แสดงออกนี้หรือไม่?

ถ้าฉันไม่ผิด kanjis ตัวละครระหว่างและ\u4e00\u4dbf

ฉันไม่จำเป็นต้องแสดงkanasแต่การแสดงให้พวกเขาเช่นกันจะไม่เป็นปัญหาใหญ่

คำตอบ:


12

มันเป็นไปไม่ได้ (โดยไม่ต้องใช้โต๊ะตัวใหญ่) ในการบอกตัวอักษรคันจิของญี่ปุ่นออกมาจากตัวอักษร Han ที่ไม่ได้ใช้ในภาษาญี่ปุ่น (เช่นตัวอักษรจีนหรือเกาหลี)

หากคุณต้องการตรวจจับ idehan ของฮันในช่วงพื้นฐาน (\ u4e00 ถึง \ u9fff) จากนั้นจะถูกเข้ารหัสเป็น 3 ไบต์ไบต์แรกจะอยู่ระหว่าง 0xe4 ถึง 0xe9 ไบต์ที่สองและสามระหว่าง 0x80 และ 0xbf

มีสองปัญหาที่นี่ก่อนอื่นคุณต้องบอก grep ที่คุณต้องการดูแลไบต์และไม่ตัวอักษร; จากนั้นคุณต้องพิมพ์ 0xe4, 0xe9, 0x80 และ 0xbf ไบต์เพื่อใส่ไว้ในนิพจน์ regexp

ฉันค้นพบสวิตช์ -P ทำทั้งสองอย่าง และบรรทัดที่คุณต้องการคือ:

grep -P "[\xe4-\xe9][\x80-\xbf][\x80-\xbf]"

และถ้าคุณต้องการคะด้วย:

grep -P "[\xe4-\xe9][\x80-\xbf][\x80-\xbf]|\xe3[\x81-\x83][\x80-\xbf]"

นั่นใช้งานได้ดี!
Nicolas Raoul

4

ตามตารางที่ห้าที่นี่คันจิเป็น caracters ระหว่าง\u4e00และ\u9fff

การติดตั้งของฉันgrepดูเหมือนจะไม่สามารถจัดการกับอักขระ Unicode (นั่นคือ GNU grep 2.14 ใน Archlinux) แต่เรายังคงสามารถใช้งาน\xได้ คุณสามารถค้นหารหัสที่เกี่ยวข้องได้ที่นี่หรือใช้เครื่องมือที่ต้องการhexeditรับ

สำหรับสิ่งใดก็ตามที่อยู่ในช่วงที่เราสนใจe9 be a5กลับมา "อักขระการเรียงหน้าไม่ถูกต้อง" ดังนั้นนี่คือสิ่งที่ฉันได้รับ:

grep "["$'\xe4\xb8\x80'"-"$'\xe9\xbe\xa5'"]" file.txt

+1 ใช้งานได้เช่นกัน แต่ Pablo ก็เร็วขึ้นนิดหน่อย ...
Nicolas Raoul

3
grep "[一-龥]"ที่เทียบเท่ากับ ปัญหาคือมันขึ้นอยู่กับสถานที่และใช้กฎการเปรียบเทียบ; นั่นคือเฉพาะองค์ประกอบที่กำหนดลำดับการเรียงสามารถใช้ในช่วงหรือจับคู่ -Pสวิทช์ก็ไม่ตรงกับไบนารีโดยไม่คำนึงถึงสถานที่เกิดเหตุ วิธีการตามโลแคลจะใช้คำจำกัดความทางวัฒนธรรมของ "ช่วงตัวอักษร" วิธีการแบบฐานสองจะใช้การกำหนดค่าการเข้ารหัสของ "ช่วง" โดยเฉพาะอย่างยิ่งสำหรับสคริปต์ตัวอักษรผลลัพธ์ที่แตกต่างกันมาก (ที่นี่สำหรับอุดมการณ์ของฮั่นมันเทียบเท่ากันคร่าวๆ)
Pablo Saratxaga
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.