소스코드가 아닌 일반 텍스트 파일에서만 검색

소스코드가 아닌 일반 텍스트 파일에서만 검색

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 옵션을 사용할 수도 있습니다.

관련 정보