내 상자에는 Windows 시스템의 일부 데이터베이스 덤프가 있습니다. 텍스트 파일입니다. 나는 그들을 grep하기 위해 cygwin을 사용하고 있습니다. 이 파일은 일반 텍스트 파일인 것 같습니다. 메모장이나 워드패드와 같은 텍스트 편집기로 열었는데 깨끗해 보였습니다. 하지만 grep을 실행하면 binary file foo.txt matches
.
NUL
나는 이 파일들 에 데이터베이스 덤프의 아티팩트라고 가정하는 일부 ASCII 문자가 포함되어 있음을 발견했습니다 .
그렇다면 grep이 이러한 파일이 바이너리라고 생각하는 이유는 무엇입니까? 수치 NUL
? 파일 시스템에 플래그가 있습니까? grep에서 행 일치 항목을 표시하려면 무엇을 변경해야 합니까?
답변1
NUL
파일에 문자가 있으면 grep은 이를 바이너리 파일로 처리합니다.
이와 같은 해결 방법이 있을 수 있습니다 cat file | tr -d '\000' | yourgrep
. 먼저 모든 null 값을 제거한 다음 파일을 검색하세요.
답변2
grep -a
나를 위해 작동합니다:
$ grep --help
[...]
-a, --text equivalent to --binary-files=text
답변3
이 strings
유틸리티를 사용하면 모든 파일에서 텍스트 콘텐츠를 추출하고 grep
아래와 같이 파이프할 수 있습니다 strings file | grep pattern
.
답변4
내 텍스트 파일 중 하나가 갑자기 grep에 의해 바이너리 파일로 처리됩니다.
$ file foo.txt
foo.txt: ISO-8859 text
해결책은 다음을 사용하여 변환하는 것입니다 iconv
.
iconv -t UTF-8 -f ISO-8859-1 foo.txt > foo_new.txt