바이너리를 무시하도록 이 검색 명령을 수정할 수 있습니까?

바이너리를 무시하도록 이 검색 명령을 수정할 수 있습니까?

텍스트 파일(변수 이름 등)에서 특정 콘텐츠를 찾는 데 사용했던 "스캔"이라는 작은 스크립트를 통해 생성된 명령이 있습니다.

find "." \
  | awk '{print "\""$0"\""}' \
  | xargs grep -n --exclude-dir=.git "<iframe" \
  | awk 'length($0) < 1000'

예를 들어 여기서는 iframe 열기 태그를 검색하는 데 사용하고 있습니다.

마지막 줄은 길이가 1000자 미만인 줄만 고려하도록 지시합니다. 왜냐하면 줄 길이가 있는 파일은 일반적으로 바이너리 파일이거나 연결된 자바스크립트이기 때문에 일반적으로 관심이 없습니다. (긴 줄을 보고 싶다면)

바이너리를 제외하도록 이를 수정하는 더 좋은 방법이 있습니까? 아니면 .mp4, .mp3, .swf, .jpg, .png 등과 같이 무시하고 싶은 파일 형식을 명시적으로 나열하는 것이 더 나을까요?

답변1

man grep말해 주세요:

--binary-files=TYPE

파일의 처음 몇 바이트가 파일에 이진 데이터가 포함되어 있음을 나타내는 경우 해당 파일은
TYPE 유형으로 간주됩니다. 기본적으로 TYPE은 이며 binary, grep은 일반적으로 바이너리가 일치함을 나타내는 한 줄 메시지를 출력하거나, 일치하지 않으면 메시지를 출력하지 않습니다. TYPE이 이면 grep은 >binary files가 이 옵션 without-match과 동일하다고 가정합니다 . -ITYPE이 인 경우 textgrep은 바이너리 파일을 텍스트인 것처럼 처리합니다. 이는 이 -a옵션과 동일합니다. 경고: grep --binary-files=text바이너리 가비지가 출력될 수 있으며, 출력이 터미널에 대한 것이고 터미널 드라이버가 그 중 일부를 명령으로 해석하는 경우 심각한 부작용이 있을 수 있습니다.

그러면 그것이 -I당신에게 효과가 있을 것 같나요? ( grep파일 앞부분에 ASCII가 아닌 문자가 있으면 혼동을 일으킬 수 있습니다.)

아, 애초에 이 기능이 꼭 필요하지는 않을 것 같고 gawk발견 된 파일 이름을 널 바이트로 종료하는 find … -exec옵션과 함께 사용해야 할 것 같습니다 .-0

관련 정보