나는 우분투에 있고 타이핑 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_의 답변과 마찬가지로 사용하는 것입니다 .grep
cat
cat .bash_history | grep -a git
또는
grep -a git .bash_history