텍스트 파일(변수 이름 등)에서 특정 콘텐츠를 찾는 데 사용했던 "스캔"이라는 작은 스크립트를 통해 생성된 명령이 있습니다.
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
과 동일하다고 가정합니다 .-I
TYPE이 인 경우text
grep은 바이너리 파일을 텍스트인 것처럼 처리합니다. 이는 이-a
옵션과 동일합니다. 경고:grep --binary-files=text
바이너리 가비지가 출력될 수 있으며, 출력이 터미널에 대한 것이고 터미널 드라이버가 그 중 일부를 명령으로 해석하는 경우 심각한 부작용이 있을 수 있습니다.
그러면 그것이 -I
당신에게 효과가 있을 것 같나요? ( grep
파일 앞부분에 ASCII가 아닌 문자가 있으면 혼동을 일으킬 수 있습니다.)
아, 애초에 이 기능이 꼭 필요하지는 않을 것 같고 gawk
발견 된 파일 이름을 널 바이트로 종료하는 find … -exec
옵션과 함께 사용해야 할 것 같습니다 .-0