거대한 UTF-8 텍스트 파일에서 일본어 한자 가 포함 된 모든 줄을 표시하고 싶습니다 . 이것은
어떤 grep
(또는 다른) 표현입니까?
내가 실수하지 않으면 간지가 \u4e00
와 사이의 문자 \u4dbf
입니다.
답변
일본어를 사용하지 않는 한 표의 문자에서 중국어 한자를 구별하는 것은 (거대한 테이블을 사용하지 않고) 불가능합니다 (예 : 중국어 또는 한국어 변형).
기본 범위 (\ 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