grep : 일본어 한자가 포함 된 모든 줄 찾기 UTF-8 텍스트 파일에서 일본어 한자 가 포함

거대한 UTF-8 텍스트 파일에서 일본어 한자 가 포함 된 모든 줄을 표시하고 싶습니다 . 이것은
어떤 grep(또는 다른) 표현입니까?

내가 실수하지 않으면 간지가 \u4e00와 사이의 문자 \u4dbf입니다.

나는 kanas 를 보여줄 필요는 없지만 , 그것들을 보여주는 것도 큰 문제는 아닙니다.



답변

일본어를 사용하지 않는 한 표의 문자에서 중국어 한자를 구별하는 것은 (거대한 테이블을 사용하지 않고) 불가능합니다 (예 : 중국어 또는 한국어 변형).

기본 범위 (\ u4e00 ~ \ u9fff)에서 Han 표의 문자를 감지하려면 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유니 코드 문자 (Archlinux의 GNU grep 2.14)를 처리 할 수 ​​없지만 여전히 사용할 수 있습니다 \x. 여기 에서 해당 코드를 찾 거나 hexedit얻을 수 있는 도구를 사용할 수 있습니다.

위의 관심 범위에 해당하는 항목에 대해 e9 be a5“잘못된 데이터 정렬 문자”가 반환되었으므로 이것이 내가 찾은 것입니다.

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