grep은 파일에서 문자열 패턴을 찾으려고 할 때 "이진 파일(표준 입력) 일치"를 반환합니다.

grep은 파일에서 문자열 패턴을 찾으려고 할 때 "이진 파일(표준 입력) 일치"를 반환합니다.

우분투에서 나는 타이핑 cat .bash_history | grep git하고 돌아왔다.

바이너리 파일(표준 입력) 일치

My 가 bash_history존재하며, 로 끝나는 줄이 많이 있습니다 git.

이 오류가 표시되는 원인과 해결 방법은 무엇입니까?

답변1

당신은 그것을 사용할 수 있습니다 grep -a 'pattern'.

~에서사람들은 grep페이지:

-a, --text
텍스트와 같은 바이너리 파일을 처리하는 것은 다음과 같습니다.--바이너리=텍스트옵션.

답변2

아마도 파일은 .bash_history텍스트가 아닌 데이터로 시작하므로 grep파일은 바이너리 파일로 처리됩니다. 출력은 다음을 확인합니다 file .bash_history.

.bash_history: data 

일관된 보기를 얻기 위해 처음부터 몇 바이트를 읽을 수 있습니다.

head -c1K .bash_history 

먼저 여기서 1KiB를 읽어보겠습니다.

hexdumpSTDOUT을 / 또는 이와 유사하게 파이프할 수 있습니다 od.


참고로 grep파일 이름은 매개변수로 사용되므로 cat여기서는 쓸모가 없습니다.

grep git .bash_history

답변3

이는 bash 기록의 null 바이트로 인해 발생할 수 있습니다. null 문자가 포함된 줄을 제거하면 문제가 해결될 수 있습니다. grep의 Perl-regexp 모드를 사용하여 확인할 수 있습니다.

grep -Pa '\x00' .bash_history

이 게시물UNIX가 아닌 시스템에 대한 제안 사항이 있습니다.

답변4

오류는 파일의 데이터가 바이너리이기 때문에 발생합니다. strings 명령을 사용하면 strings일반적으로 사용하는 검색에서 사람이 읽을 수 있는 부분을 볼 수 있습니다.grep

strings data | grep -i whatever

관련 정보