답변1
(거대한 표를 사용하지 않고) 일본어 한자와 일본어에서 사용되지 않는 한자 표의 문자(예: 중국어 또는 한국어 변형)를 구별하는 것은 불가능합니다.
기본 범위(\u4e00~\u9fff)의 한자 표의 문자를 감지하려는 경우 3바이트로 인코딩됩니다. 첫 번째 바이트는 항상 0xe4와 0xe9 사이이고, 두 번째와 3바이트는 0x80과 0xbf 사이입니다.
여기에는 두 가지 어려움이 있습니다. 먼저 문자가 아닌 바이트를 처리하고 싶다고 grep에 지시한 다음 0xe4, 0xe9, 0x80 및 0xbf 바이트를 입력하여 정규식에 넣어야 합니다.
-P 스위치가 원하는 라인은 다음과 같습니다.
grep -P "[\xe4-\xe9][\x80-\xbf][\x80-\xbf]"
가명도 원하는 경우:
grep -P "[\xe4-\xe9][\x80-\xbf][\x80-\xbf]|\xe3[\x81-\x83][\x80-\xbf]"
답변2
다섯 번째 표에 따르면여기\u4e00
, 한자는 및 사이의 문자입니다.\u9fff
내 구현은 grep
유니코드 문자(예: Archlinux의 GNU grep 2.14)를 처리할 수 없는 것 같지만 여전히 사용할 수 있습니다 \x
. 해당 코드를 찾을 수 있습니다.여기또는 비슷한 도구를 사용하여 hexedit
얻을 수도 있습니다.
위에서 관심 있는 범위의 모든 항목에 대해 e9 be a5
"잘못된 정렬 문자"를 반환하므로 이것이 제가 생각해낸 것입니다.
grep "["$'\xe4\xb8\x80'"-"$'\xe9\xbe\xa5'"]" file.txt