특정 문자열에 대해 텍스트 파일의 이진 검색을 수행하려면 어떻게 해야 합니까?

특정 문자열에 대해 텍스트 파일의 이진 검색을 수행하려면 어떻게 해야 합니까?

한 줄에 많은 수의 레코드가 포함된 텍스트 파일이 있습니다. 일부 기록에 손상된 특수 문자가 있는데, 다음보다 높은 여러 문자 시퀀스를 찾아 이를 찾으려고 합니다.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 설정에 할당되어 있지 않은지 확인하세요.

관련 정보