Відповіді:
Неможливо (без використання величезної таблиці) відокремити японські канджі від ідеографа Хань, що не використовується японською мовою (наприклад, китайський або корейський варіант).
Якщо ви просто хочете виявити будь-який ідеограф Хана в базовому діапазоні (\ 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]"
У відповідності з п'ятим столом тут , кандзі є caracters між \u4e00
і\u9fff
Моя реалізація grep
не схоже на обробку символів Unicode (це GNU grep 2.14 в Archlinux), але ми все ще можемо використовувати \x
. Ви можете знайти відповідні коди тут або скористатися інструментом, як hexedit
їх отримати.
Для всього, що є в нашому діапазоні інтересів, що e9 be a5
повернувся вище, "Недійсний символ збірки", ось що я придумав:
grep "["$'\xe4\xb8\x80'"-"$'\xe9\xbe\xa5'"]" file.txt
grep "[一-龥]"
. проблема полягає в тому, що вона залежить від локальної локалізації та використовує правила зіставлення; тобто в діапазоні можуть бути використані лише елементи, для яких визначено порядок сортування. -P
Перемикач просто робить двоичное відповідність, незалежно від мови. Локальний підхід використовує культурне визначення "діапазону символів", а двійковий підхід використовує визначення значення кодування "діапазон". Особливо для алфавітних сценаріїв вихід зовсім інший. (тут для ідеографії Хана це приблизно рівнозначно)