grep이 기본적으로 바이너리 파일을 무시하지 않는 이유는 무엇입니까?

grep이 기본적으로 바이너리 파일을 무시하지 않는 이유는 무엇입니까?

grep이 플래그에 대한 설명 에 대한 맨페이지는 -I다음과 같습니다.

-I      Ignore binary files.  This option is equivalent to 
        --binary-file=without-match option.

또한 바이너리에 대해서는 다음과 같이 말합니다.

 --binary-files=value Controls searching and printing of binary files.
         Options are binary, the default: search binary files but do not print
         them; without-match: do not search binary files; and text: treat all
         files as text.

바이너리 파일에서 일치하는 것에 관심을 갖는 상황은 상상할 수 없습니다. 그러한 상황이 존재한다면 이는 규칙이라기보다는 확실히 예외입니다. 이 플래그를 설정하지 않고 기본적으로 grep바이너리를 무시 하지 않는 이유는 무엇입니까?

답변1

grep이 생각하는 모든 것이 바이너리 파일은 아니지만 실제로는 그렇습니다. 예를 들어, Puppet의 로그에는 ANSI 색상 코딩이 있으므로 grep은 이를 바이너리라고 생각하게 됩니다. /var/log를 보고 있는 경우에도 여전히 해당 항목을 검색하고 싶습니다.

답변2

grepld바이너리를 검색하는 기능은 프로그램을 컴파일할 때 링커( )가 일부 기능을 찾을 수 없다고 불평할 때도 유용합니다. 다음과 같은 명령을 사용할 수 있습니다.

grep기능 이름/lib/lib*

해당 내용이 포함된 라이브러리를 찾으세요. (라이브러리는 바이너리입니다.)

답변3

바이너리 파일이나 grep이 바이너리 파일로 간주하는 파일을 처리하려면 다음을 사용하십시오.

grep --binary-files=text "data" f1 f2

관련 정보