여러 바이너리가 있고이 바이너리 안에 내가 찾고 싶은 문자열이 있다는 것을 알고 있습니다.
원하는 작업 :
grep -lir "the string I am looking for"
그리고 해당 문자열을 포함하지만 는 분명히 이러한 파일에서 작동하지 않습니다.
터미널에서 이런 종류의 검색을 수행 할 수있는 명령이 있습니까?
답변
GNU grep , -a 옵션을 사용하여 바이너리 파일을 텍스트 파일로 취급하도록 할 수 있습니다.
grep -ali -- string file
Grep 버전이 -a
를 지원하지 않는 경우 ack . ack 1.x에서는 -a
옵션을 포함해야합니다. ack 2.x에서는 검색 할 때 기본적으로 텍스트가 아닌 파일을 포함하므로 (비 텍스트 파일을 지정하지 않은 경우).
댓글
답변
strings
명령은 파일의 모든 ASCII 데이터를 작동합니다. 그런 다음 grep
출력을 수행하면 데이터를 검색 할 수 있습니다.
strings <filename> | grep "search text"
댓글
- 이것은 허용되는 답변이어야합니다. 이 바이너리는이 작업에 적합합니다.
- @xeon : '
strings
를 사용하는 것이 항상 좋은 것은 아닙니다. 자세한 내용은 여기 를 참조하세요. - 목표는 어떤 바이너리에 문자열이 포함되어 있는지 확인하는 것이므로
strings -f
가 더 적절합니다. - 더 나은 답변입니다.
- 가장 좋은 답변입니다. 감사합니다.
답변
귀하의 질문은 패턴이 포함 된 바이너리 파일을 찾는 것입니다 (이미 아주 좋은 답변!). 보완 적으로 우리는 발생을 얻고 싶을 수 있습니다.
저는 종종
grep -aPo ".{0,20}pattern.{0,20}" binfile
를 사용하여 20 자 주위의 컨텍스트를 얻습니다.
ack
' s self-description? (매뉴얼에 있음) " ack 2.x는 그렇지 않은 모든 일반 비 바이너리 파일을 검색합니다. 명시 적으로 무시 됨 [by blah blah] " 따라서 내용이 바이너리로 보이면 ack 2.x가 파일 읽기를 중지해야하는 것처럼 들립니다.ack grep /bin/grep
를 시도하면 결과를 얻을 수 있습니다. 혼동을 방지하기 위해 답변을 업데이트했습니다.