ELF
다음 명령을 사용하여 현재 디렉터리의 일반 텍스트 파일에서 문자열을 재귀적으로 검색합니다.
grep ELF -r .
하지만 이진 파일(예: zip 파일, PDF 파일)은 물론 HTML 파일 및 .js
.
소스 코드가 아닌 일반 텍스트 파일에서만 검색하도록 지정하려면 어떻게 해야 합니까?
답변1
GNU grep을 사용하여 --binary-files=without-match
바이너리 무시를 전달합니다. 소스코드 파일은 텍스트 파일이므로 결과에 포함됩니다.
특정 확장자를 가진 텍스트 파일을 무시하려는 경우 이 옵션을 사용할 수 있습니다 --exclude
.
grep -r --exclude='*.html' --exclude='*.js' …
또는 명시적으로 일치하는 파일만 포함할 수도 있습니다.
grep -r --include='*.txt' …
소스 코드인 텍스트 파일을 무시하려면 다음을 사용할 수 있습니다.file
주문하다어떤 파일이 소스 코드인지 맞춰보세요. 이는 경험적 방법을 사용하여 소스 코드를 소스 코드가 아닌 것으로 감지하거나 그 반대로 감지할 수 있습니다.
find -type f exec sh -c '
for x do
case $(file <"$x") in
*source*) :;; # looks like source code
*text*) grep -H -e "$0" "$x";; # looks like text
# else: looks like binary
esac
done
' "REGEXP" {} +
또는
find -type f exec sh -c '
for x do
case $(file -i <"$x") in
text/plain\;*) grep -H -e "$0" "$x";; # looks like text
# else: looks like source code or binary
esac
done
' "REGEXP" {} +
또는 다음을 사용할 수 있습니다.확인하다grep 대신. Ack는 파일 이름을 기반으로 파일 분류 시스템을 통합합니다. 기본적으로 소스 코드에서 검색하는 데 적합하지만 options 를 전달하여 다른 유형을 검색하도록 지시할 수 있습니다 --type
.ack를 사용하여 모든 파일 검색도움이 될 수도 있습니다.
답변2
파일 확장자로만 제한하려면 grep --include 옵션을 사용할 수 있습니다.
grep -R --include="*.txt" "pattern" /path/to/dir/
또 다른 방법은 텍스트는 아니지만 html 및 js 파일을 포함하는 파일을 제거하고 업데이트 후 --exclude 옵션을 사용하여 이러한 파일을 제외하는 것입니다. 예:
find /path/to/dir -type f -print | xargs file | grep text | cut -f1 -d: | xargs grep --exclude=\*.{js,html} "pattern"
주석에서 언급했듯이 --exclude-from=FILE 옵션을 사용할 수도 있습니다.