독일어의 유효한 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'
물론 이건 안 되겠지고정시키다파일을 나열하면 됩니다. 실제로 파일을 수정하려면(가능한 경우) 문제의 예를 게시해 주세요. 두 줄이나 세 줄이면 충분합니다.