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


70

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

이진 파일 (표준 입력) 일치

bash_history존재하고로 시작하는 많은 줄이 있습니다 git.

이 오류가 발생하는 원인은 무엇이고 어떻게 해결할 수 있습니까?


file .bash_history( file ~/.bash_history) 의 결과는 무엇입니까?
heemayl

출력은.bash_history: data
answerSeeker

어떤 이유로 든 이것은 내 아파치 로그에서 발생했습니다. 질문과
답변에

답변:


11

아마도 파일 .bash_history은 텍스트가 아닌 데이터로 시작하므로 grep파일을 이진 파일로 취급합니다. 이것은 file .bash_history출력 으로 확인됩니다 .

.bash_history: data 

처음부터 몇 바이트를 읽어 적합한보기를 가질 수 있습니다.

head -c1K .bash_history 

여기서 나는 첫 번째 KiB를 읽고 있습니다.

STDOUT을 hexdump/ od또는 이와 유사한 것으로 파이프 할 수 있습니다 .


참고로 grep파일 이름을 인수로 사용하므로 cat여기에서는 쓸모가 없습니다. 그냥 해:

grep git .bash_history

grep 문제를 해결하는 방법을 여전히 잘 모르겠습니다 head -c1k .bash_history. 내 .bash_history 파일의 처음 38 줄을 읽으십시오. 모든 것을 읽을 수 있음
answerSeeker

2
@TatakaiWasumi 무엇의 출력 grep -a git .bash_history입니까?
heemayl

1
작동했습니다! 내가 원하는 모든 것을 얻었습니다. 무엇을 -a합니까?
answerSeeker

6
@TatakaiWasumi -agrep파일을 이진 파일로 취급합니다.
heemayl

3
-a확인 grep이 텍스트 인 것처럼 이진 파일을 처리합니다.
lashgar

127

사용할 수 있습니다 grep -a 'pattern'.

에서 남자 그렙 페이지 :

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

이것은 -z여러 줄에서 일치시키기 위해 플래그를 사용할 때 도움이되었습니다 .
stragu

이 답변이이 질문에 가장 적합해야합니다.
Michael Pacheco

예,이 답변이 훨씬 더 적합합니다!
Daywalker

3

나는이 질문을 오늘 보았습니다 .bash_history. (작은 참고 : 새 기록이 만들어 지도록 내 기록의 이름을 변경했습니다.이 새로운 기록은 이진으로 처리되지 않았습니다.)

@heemayls 대답에서는 grep파일 이름 cat을 사용하며 쓸모 가 없다고 명시되어 있습니다. 이것은 전적으로 사실이 아닙니다. 에서 grep의 man 페이지 :

파일이 지정되지 않았거나“-”파일이 제공되면 grep은 표준 입력을 검색합니다.

그래서 당신은 cat그것을 사용 하고 파이프 할 수 있습니다 grep. 그러나 이것은 .bash_history바이너리로 취급되는 문제를 해결하지 못합니다 . 역사를 직접적으로 또는 파이프 를 사용 grep -a하든 관계없이 유일한 올바른 방법은 @AK_의 답변과 마찬가지로 사용하는 것입니다 .grepcat


cat .bash_history | grep -a git

또는

grep -a git .bash_history


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