Odpowiedzi:
Niemożliwe jest (bez użycia ogromnego stołu) rozróżnienie japońskiego kanji od ideografu Han nie używanego w języku japońskim (np. Wariant chiński lub koreański).
Jeśli chcesz tylko wykryć dowolny ideograf Hana w zakresie podstawowym (\ u4e00 do \ u9fff), to są one zakodowane w 3 bajtach, pierwszy bajt zawsze zawiera się między 0xe4 a 0xe9, drugi i trzeci bajt między 0x80 a 0xbf.
Istnieją tutaj dwie trudności, najpierw musisz powiedzieć grepowi, że chcesz zajmować się bajtami, a nie znakami; następnie musisz wpisać bajty 0xe4, 0xe9, 0x80 i 0xbf, aby umieścić je w wyrażeniu regularnym.
Odkryłem, że przełącznik -P działa zarówno; a linia, którą chcesz to:
grep -P "[\xe4-\xe9][\x80-\xbf][\x80-\xbf]"
a jeśli chcesz też Kana:
grep -P "[\xe4-\xe9][\x80-\xbf][\x80-\xbf]|\xe3[\x81-\x83][\x80-\xbf]"
Zgodnie z piątą tabelą tutaj kanji to znaki pomiędzy \u4e00
i\u9fff
grep
Wydaje się, że moja implementacja nie jest w stanie obsłużyć znaków Unicode (to jest GNU grep 2.14 na Archlinuxie), ale nadal możemy jej używać \x
. Możesz znaleźć odpowiednie kody tutaj lub użyć narzędzia takiego jak hexedit
je zdobyć.
Dla wszystkiego, co znajduje się w naszym kręgu zainteresowań, powyżej e9 be a5
zwróciłem „Niepoprawny znak zestawienia”, więc oto co wymyśliłem:
grep "["$'\xe4\xb8\x80'"-"$'\xe9\xbe\xa5'"]" file.txt
grep "[一-龥]"
. problem polega na tym, że jest on zależny od ustawień regionalnych i używa reguł sortowania; to znaczy, tylko elementy, dla których zdefiniowano porządek sortowania, mogą być użyte w zakresie lub dopasowane. -P
Przełącznik właśnie robi dopasowanie binarne, niezależnie od lokalizacji. Podejście lokalne wykorzystuje kulturową definicję „zakresu znaków”, podejście binarne wykorzystuje definicję wartości kodowania „zasięgu”. Szczególnie w przypadku skryptów alfabetycznych wyniki są zupełnie inne. (tutaj dla ideografii Hana jest to w przybliżeniu odpowiednik)