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_OPTIONS를 원하는 설정으로 설정할 수 있습니다. 그러면 ' 그만큼 많은 명령 줄 스위치를 사용할 필요가 없습니다. .
  • 이러한 변수를 지원하지 않는 다른 명령에 대한 참고 사항 : .(ba|z|foo)shrc': 별칭 grep =

    grep -I "`.

  • 실제로 매우 유용 할 수 있습니다. 예를 들어 Unity 버전을 검색했습니다. 어떤 파일이 보관되어 있는지 기억할 수 없습니다. ' 버전의 형식을 검색 한 결과 일치하는 바이너리 파일이 나타났습니다. 이전 버전 5 였기 때문에 버전은 바이너리 파일로만 존재했기 때문에 바이너리 일치가 없으면 놓쳤을 수 있습니다.
  • FYI Ther e ' ack 도구는 "보다 낫습니다. grep ". Ack는 바이너리 파일을 ' 검색하지 않습니다. Debian에서는 " ack-grep "라는 이름으로 제공됩니다.

Answer

grep이 이진 파일이라고 생각하는 모든 것이 실제로는 이진 파일입니다. 예 : puppet의 로그에는 ansi 색상 코딩이있어 grep이 “바이너리”라고 생각하게합니다. 그래도 / var / log를 검색하는 경우에도 검색하고 싶습니다.

코멘트

  • PDF 파일의 경우도 마찬가지입니다. 글쎄.
  • + 역사적으로 grep은 그렇게 할 수 없었기 때문에 호환성을 위해서만 기본값이 모든 것을 포함해야합니다.
  • @OlivierDulac 의미가 있습니다. 그렇지 않으면 바이너리 파일을 무시하는 것이 좋습니다. 기본값입니다.

답변

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입니다.
  • 음, grep some_function /lib/*는 더 짧고 일반적으로 정답을 제공합니다-내가 찾고있는 도서관 이름. 그러나 예, 때로는 귀하와 같은 더 정교한 접근 방식도 필요합니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다