텍스트처럼 보이는 이진 파일을 어떻게 grep합니까?


76

텍스트 인 바이너리 파일이 있지만 로그를 내보냈지만 덜 열 수는 없습니다 (보기 흉한 모양-바이너리 파일처럼 보입니다). 나는 vi로 그것을 열 수 있고 그것을 고양이로 만들 수 있다는 것을 발견했다. 검색). 내가 할 수있는 방법이 있습니까?



11
시도 했습니까 grep -a?
quanta

답변:


85

grep어쨌든 파일을 검색 하는 데 사용할 수 있습니다 . 입력 파일이 실제로 텍스트인지 아닌지는 신경 쓰지 않습니다. '남자 grep'에서 :

    -a, --text
          Process a binary file as if it were text; this is equivalent to the --binary-files=text option.

   --binary-files=TYPE
          If  the  first few bytes of a file indicate that the file contains binary data, assume that the file is
          of type TYPE.  By default, TYPE is binary, and grep normally outputs either a one-line  message  saying
          that a binary file matches, or no message if there is no match.  If TYPE is without-match, grep assumes
          that a binary file does not match; this is equivalent  to  the  -I  option.   If  TYPE  is  text,  grep
          processes  a  binary  file  as  if  it  were  text; this is equivalent to the -a option.  Warning: grep
          --binary-files=text might output binary garbage, which can have nasty side effects if the output  is  a
          terminal and if the terminal driver interprets some of it as commands.

두 번째 단락 끝에주의 표시를하십시오. grep의 결과를 새 파일로 리디렉션하고 vi / less로 검사 할 수 있습니다.


grep은 실제로 작동하지 않습니다. 저장 장치에 grep을 시도하십시오. 메모리가 부족합니다. 적당한 길이의 라인에 의존하는 깨진 내부 버퍼링 메커니즘을 가지고 있습니다.
user239558

41

그것을 통해 파이프 strings하면 텍스트 만 남기고 모든 바이너리 코드가 제거됩니다.


strings분명히 utf-8이 텍스트라는 것을 이해하지 못합니다.
Javier

6

부여 bgrep시도. ( 원래 출시 / 최신 포크 )


이것이 가장 좋은 대답이라고 생각합니다. 여기에 같은 이진 검색의 나쁜 구현 볼 성가신입니다 commandlinefu.com/commands/matching/grep-binary/... 바이 탈출하는 경우 \x정말 여기처럼 작동하지 않습니다 grep -P "\x05\x00\xc0" mybinaryfile.
Léo Léopold Hertz 준영

나는 실행 bgrep "fafafafa" test_27.6.2015.bin |less하지만 test_27.6.2015.bin : 00005ee4 얻습니다 . 내가 이것을 찾고 있었기 때문에 나는 fafafafa를 얻는다고 가정 할 것이다 . 사람의 매뉴얼이 없습니다. 왜 그런 결과가 나오는지 아십니까?
Léo Léopold Hertz 준영

여기 bgrep의 기능에 대해 새 스레드를 열어 stackoverflow.com/q/31135561/54964
레우 레오폴드 헤르츠 준영

차이점은 grep -a무엇입니까?
rubo77

불행하게도, bash: bgrep: command not found...하고 No package bgrep available.

5

이 세 가지 명령을 사용할 수 있습니다.

  1. grep -a <sth> file.txt

  2. cat -v file.txt | grep <sth>

  3. cat file.txt | tr '[\000-\011\013-\037\177-\377]' '.' | grep <sth>


tr은 내 solaris 10 상자에서 작동하지 않는 것 같습니다. 간단한 테스트 : echo -e 'x \ ty'| tr '[\ 000- \ 011 \ 013- \ 037 \ 177- \ 377]' '.' 탭을 번역하지 않습니다.
user55570

1

Grep 2.21부터 이진 파일은 다르게 취급됩니다 .

이진 데이터를 검색 할 때 grep은 이제 비 텍스트 바이트를 줄 종결 자로 취급 할 수 있습니다. 이것은 성능을 크게 향상시킬 수 있습니다.

따라서 이제 이진 데이터를 사용하면 텍스트가 아닌 모든 바이트 (줄 바꾸기 포함)가 줄 종결 자로 처리됩니다. 이 동작을 변경하려면 다음을 수행하십시오.

  • 사용하십시오 --text. 이렇게하면 개행 만 줄 종결자가됩니다.

  • 사용하십시오 --null-data. 이렇게하면 null 바이트 만 줄 종결자가됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.