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


94

에 대한 맨 페이지에서는 다음과 같이 플래그 를 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플래그를 설정 하지 않고 바이너리 파일을 무시 하지 않는가 ?


4
변수 GREP_OPTIONS를 원하는 설정으로 설정할 수 있으며 많은 명령 줄 스위치를 사용할 필요가 없습니다.
Marco

2
이러한 변수를 지원하지 않는 다른 명령에 대한 참고 사항 : .(ba|z|foo)shrc': 별명 grep = "grep -I"` 에서 별명을 정의하여 기본 옵션을 설정할 수 있습니다 .
Erik

1
이것은 실제로 매우 유용 할 수 있습니다. 예를 들어, 프로젝트의 유니티 버전을 검색했는데 어떤 파일이 보관되어 있는지 기억할 수 없었습니다. 버전의 형식을 검색하여 일치하는 일부 이진 파일이 나타났습니다. 버전 5 이전 버전으로 밝혀졌으며 버전은 바이너리 파일에만 존재하므로 바이너리 일치가 없으면 놓쳤을 수 있습니다.
Svend Hansen

참고 로 "그렙보다 더 나은" 툴 ack 이 있습니다. Ack는 이진 파일을 검색하지 않습니다. 데비안에서는 "ack-grep"이라는 이름으로옵니다.
teika kazura

답변:


91

grep이 생각하는 모든 것이 이진 파일 인 것은 아니며 실제로 이진 파일입니다. 예를 들어 꼭두각시 로그에는 ansi 색상 코딩이있어 grep이 바이너리라고 생각합니다. 그래도 / var / log를 통해 grepping하는 경우 여전히 검색하고 싶습니다.


4
PDF 파일도 마찬가지입니다.
Joseph R.

12
+ 역사적으로 grep은 그렇게 할 수 없었으므로 호환성을 위해서만 기본값을 모두 포함해야합니다.
Olivier Dulac

2
@OlivierDulac 그것은 의미가 있습니다. 그렇지 않으면 바이너리 파일을 무시하는 것이 기본값이어야합니다.
Dagang

5

grep이진 파일을 검색하는 기능은 프로그램을 컴파일 할 때 유용하며 링커 ( ld)가 일부 기능을 찾을 수 없다고 불평합니다. 나는 같은 명령을 사용할 수 있습니다

grep function_name / lib / lib *

라이브러리가 포함 된 라이브러리를 찾습니다. (라이브러리는 이진 파일입니다.)


이 경우에는 오히려 사용하십시오 grep -l function_name /lib/lib*또는 nm -Do /lib/lib* | grep function_name또는 ldconfig -p | grep -o '/.*/lib.*' | xargs nm -Do | grep function_name하지만.
Stéphane Chazelas 2016 년

글쎄, grep some_function /lib/*짧고 일반적으로 정답을 제공합니다-내가 찾고있는 라이브러리의 이름. 그러나 예, 때로는 귀하의 접근 방식과 같은보다 정교한 접근 방식이 필요합니다.
Daniel Frużyński 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.