우분투에서 나는 타이핑 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를 읽어보겠습니다.
hexdump
STDOUT을 / 또는 이와 유사하게 파이프할 수 있습니다 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