다음 문자가 포함된 모든 파일을 찾습니다: �

다음 문자가 포함된 모든 파일을 찾습니다: �

독일어의 유효한 utf8 기호가 "�"로 대체되는 거대한 코드 베이스(주로 2Gb 코드)가 있습니다.

이 콘텐츠가 포함된 모든 파일을 안정적으로 찾을 수 있는 방법이 있습니까? Visual Studio Code는 "가끔" 파일을 찾지만 일관되지는 않습니다. 이것은 매우 이상합니다.

grep -rnw . -e '�'

일부 바이너리 및 .png 파일에서만 찾을 수 있으며 텍스트 파일(.c, .h, .m 등)에서는 전혀 찾을 수 없습니다.

어떤 아이디어가 있나요? 매우 감사합니다!

답변1

대답은 다음을 기반으로 해야 합니다.

grep -axv '.*' file.txt

(재귀적으로) 모두 찾기파일 이름( -l)에 잘못된 문자가 포함되어 있습니다. 다음을 사용하십시오. (
예, 파일 이름이 필요하지 않습니다.)

grep -rlaxv '.*'

존재하다

grep -axv '.*'
  • -a grep으로 텍스트 대신 바이너리로 나타날 수 있는 파일을 엽니다.
  • -x전체 행을 선택하는 데 사용됩니다 (다음 옵션에 필요).
  • 선택한 콘텐츠를 반전 시키는 것입니다 -v(함께 작동함 -x).
  • 정규 표현식은 .*무엇이든 일치합니다.효과적인특징. inversion을 사용하면 -v전체 명령이 무엇이든 포함하는 전체 줄과 일치합니다.유효하지 않은특징.

그러나 유효 여부의 정의는 읽고 있는 파일의 인코딩에 따라 다르다는 점을 이해하시기 바랍니다. 시스템이 기본적으로 UTF-8 인코딩을 사용하는 경우 이 명령은 잘못된 UTF-8 시퀀스를 감지합니다. 다른 인코딩을 감지하려면 로케일을 변경하세요.

또한 이 명령의 목표는 다음을 찾는 것입니다.유효하지 않은수치. 실제 문자 "�"를 찾는 것이 목표인 경우 해당 문자를 검색하면 됩니다.

grep -oP '�' file

또는 어떤 문자인지(bash, ksh, zsh에서) 혼동을 피하기 위해 일치하는 파일 이름을 나열하십시오.

grep -rloP $'\Ufffd'

자세한 내용은 이 답변에 나와 있습니다.

물론 이건 안 되겠지고정시키다파일을 나열하면 됩니다. 실제로 파일을 수정하려면(가능한 경우) 문제의 예를 게시해 주세요. 두 줄이나 세 줄이면 충분합니다.

관련 정보