파일에서 문자열 패턴을 찾으려고하면 grep에서 “이진 파일 (표준 입력) 일치”를 반환합니다. 파일 (표준 입력) 일치 내 bash_history존재하고로 시작하는 많은

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

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

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

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



답변

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

.bash_history: data

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

head -c1K .bash_history

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

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


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

grep git .bash_history


답변

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

에서 남자 그렙 페이지 :

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


답변

나는이 질문을 오늘 보았습니다 .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


답변