텍스트 파일의 특정 문자열에 대해 이진 검색을 수행하는 방법은 무엇입니까?

텍스트 파일의 특정 문자열에 대해 이진 검색을 수행하는 방법은 무엇입니까?

많은 수의 레코드가 포함된 텍스트 파일이 있는데, 각 레코드는 한 줄을 차지합니다. 일부 레코드에 손상된 특수 문자가 있으며 위의 여러 문자 시퀀스를 찾아 이를 찾으려고 합니다.x80

다음은 잘못된 문자가 강조 표시된 한 줄의 예입니다.

여기에 이미지 설명을 입력하세요.

관심 있는 16진수 문자열은 다음과 같습니다.

49 CC 80 C2 B9 6E

GNU Grep을 사용하면 grep --color='auto' -P -n "[\x80-\xFF]" record.txt줄의 일부만 일치하고 위 첨자 1( ¹)과 일치하지만 다음은 일치하지 않습니다 Ì.

여기에 이미지 설명을 입력하세요.

Grep은 결합된 문자 + 발음 구별 부호를 분리할 수 없는 것 같습니다...

내가 원하는 것은 x80두 개 이상의 연속 문자가 있는 줄만 유지하고 16진수 코드에 표시된 실제 문자와 일치할 수 있는 것입니다. 즉, 49 CC 80 C2 B9 6E이와 유사한 것과 일치해야 하는 것처럼 보이지만 "[\x80-\xFF]{2,10}"이 일치는 실제로 작동하지 않습니다.

따라서 명확히 하기 위해 이것을 사용하면 다음 줄이 일치합니다.

grep --color='auto' -P -n "[\x80-\xFF]" record.txt

그러나 내가 그것을 사용하면 다음과 같은 일이 발생하지 않습니다.

grep --color='auto' -P -n "[\x80-\xFF]{2,10}" record.txt

바이트 시퀀스는 CC 80 C2 B9값이 있는 4개의 연속 바이트 문자열 이므로 두 번째 것도 일치하면 안 되나요 x80-xFF?

답변1

이는 로케일 설정과 관련이 있을 수 있습니다. 그렇다면 C(POSIX라고도 함) 로케일(문자는 바이트임)을 사용하면 작동할 수 있습니다.

LC_ALL=C grep --color='auto' -P -n "[\x80-\xFF]{2,10}" record.txt

답변2

Grep은 이상한 문자로 인해 이상해질 수 있습니다. 다음을 시도해 보세요.

grep --color='auto' -P -n "[\x80-\xFF]" record.txt |  iconv -f utf-16 -t utf-16

편지를 다시 받을 수도 있지만... 색깔은 사라질 것입니다. utf-16 및 utf-8에 대해 수정하는 것이 좋습니다.

그리고 콘솔이 uft-8을 처리할 수 있고 일부 ansi 설정에 할당되지 않았는지 확인하세요.

관련 정보