Grep을 사용하여 파일 시스템의 파일에서 문자열 찾기

Grep을 사용하여 파일 시스템의 파일에서 문자열 찾기

문자열 "RUSH2112"에 대해 파일 시스템에서 여러 파일을 검색해야 합니다. 다음 명령을 완료했지만 이것이 올바른지 확실하지 않습니다. 나는 마운트된 파일 시스템에 서 있습니다.

find . -type f -exec grep -i1 "Rush2112" {} \; 

답변1

하나를 찾고(정규식이 아님) 대소문자를 구분하지 않고 grep -iF STRING( STRING찾고 있는 인용 문자열이 어디에 있어야 하는지)를 사용합니다.

디렉토리 계층 구조의 모든 일반 파일을 반복하려면 다음을 수행하십시오.

find . -type f -exec grep -iF STRING /dev/null {} +

이 명령과 사용자 명령의 주요 차이점은 grep발견된 파일 그룹에 대해 실행된다는 것입니다. 발견된 각 파일에 대해 명령이 grep한 번 실행되며, 파일이 많으면 속도가 느려질 수 있습니다. 이것이 +궁극적으로 차이를 만드는 것입니다.

또 다른 차이점은 grep여러 파일로 호출되기 때문에 일치하는 항목이 발견된 파일의 경로 이름이 출력에 포함된다는 것입니다. 저기/dev/nullgrep이 동작은 단일 파일만 사용하는 경우 호출됩니다. 구현에 비표준(그러나 일반적인) 옵션이 있는 경우 포함 대신 grep의 옵션을 사용할 수 있습니다.-H/dev/nullgrep

일부 구현에는 grephelp 없이 디렉토리 자체를 재귀적으로 수행하는 옵션도 있습니다 find. 이는 일반적 -R으로 옵션을 통해 수행됩니다.

grep -R -iF STRING .

GNU에는 이 옵션과 약간 다른 옵션 grep도 있습니다 (사용할 경우 심볼릭 링크를 따르지 않아 런타임을 통해 얻은 동작과 더 유사하게 모방됩니다 ) .-r-R-rgrepfind . -type f


찾고 있는 것이 해당 문자열을 포함하는 파일의 경로 이름이고 일치하는 파일의 실제 행이 아닐 수도 있는 경우 다양한 방법으로 이 작업을 수행할 수 있습니다(위에서 언급한 것과 유사한 방식으로 모두 동일함). )).

  • grep -q각 파일에 대한 테스트 로 사용됩니다 .

    find . -type f -exec grep -qiF STRING {} ';' -print
    
  • grep -l다음을 통해 찾은 파일 그룹 전체에서 사용됩니다 find.

    find . -type f -exec grep -ilF STRING {} +
    
  • 재귀를 사용하십시오 grep -l.

    grep -R -ilF STRING .
    

주어진 문자열을 포함하는 파일을 추가로 처리하려면 첫 번째 대안을 선택하겠습니다.

find . -type f -exec grep -qiF STRING {} ';' -exec sh -c '
    for pathname do
        # Process "$pathname" here
    done' sh {} +

또는 grep인라인 스크립트 내에서 수행하십시오.

find . -type f -exec sh -c '
    for pathname do
        if grep -qiF STRING "$pathname"; then
            # Process "$pathname" here
        fi
    done' sh {} +

관련된:

관련 정보