grep: 일본어 한자가 포함된 모든 줄 찾기

grep: 일본어 한자가 포함된 모든 줄 찾기

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

\u4e00내 기억이 맞다면 한자는 와 사이의 문자이다 \u4dbf.

보여줄 필요는 없어카나스, 하지만 그들에게도 보여주는 것은 큰 문제가 아닙니다.

답변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

관련 정보