Linux에서 특정 텍스트가 포함 된 모든 파일을 찾으려면 어떻게합니까

linux text grep directory find


특정 텍스트 문자열을 포함하는 모든 파일에 대해 전체 Linux 시스템을 스캔하는 방법을 찾으려고합니다. 명확히하기 위해 파일 이름이 아닌 파일 내에서 텍스트를 찾고 있습니다.

이 작업을 수행하는 방법을 찾을 때이 솔루션을 두 번 발견했습니다.

find / -type f -exec grep -H 'text-to-find-here' {} \;

그러나 작동하지 않습니다. 시스템의 모든 단일 파일을 표시하는 것 같습니다.

이것이 올바른 방법에 가깝습니까? 그렇지 않다면 어떻게해야합니까? 파일에서 텍스트 문자열을 찾는 기능은 내가하고있는 일부 프로그래밍 프로젝트에 매우 유용합니다.





Answer 1 rakib_


다음을 수행하십시오.

grep -rnw '/path/to/somewhere/' -e 'pattern'
  • -r 또는 -R 은 재귀 적입니다.
  • -n 은 줄 번호이며
  • -w 는 전체 단어와 일치 함을 나타냅니다.
  • 일치하는 파일의 파일 이름 만 제공하기 위해 -l (소문자 L)을 추가 할 수 있습니다.

이와 함께 --exclude , --include , --exclude-dir 플래그는 효율적인 검색에 사용될 수 있습니다.

  • 확장자가 .c 또는 .h 인 파일 만 검색합니다.

    grep --include=\*.{c,h} -rnw '/path/to/somewhere/' -e "pattern"
    
  • 확장자가 .o 인 모든 파일을 검색하는 것은 제외됩니다.

    grep --exclude=*.o -rnw '/path/to/somewhere/' -e "pattern"
    
  • 디렉토리의 경우 --exclude-dir 매개 변수를 통해 특정 디렉토리를 제외 할 수 있습니다. 예를 들어 dirs dir1 /, dir2 / 및 * .dst /와 일치하는 모든 디렉토리는 제외됩니다.

    grep --exclude-dir={dir1,dir2,*.dst} -rnw '/path/to/somewhere/' -e "pattern"
    

이것은 당신과 거의 같은 목적을 달성하기 위해 저에게 매우 효과적입니다.

더 많은 옵션을 보려면 man grep 을 확인하십시오.




Answer 2 fedorqui 'SO stop harming'


grep -ilR 을 사용할 수 있습니다 :

grep -Ril "text-to-find-here" /
  • i 대소 문자를 무시합니다 (귀하의 경우 선택 사항).
  • R 은 재귀를 나타냅니다.
  • l 은 "결과 자체가 아니라 파일 이름 표시"를 나타냅니다.
  • / 는 기계의 루트에서 시작을 나타냅니다.



Answer 3 Stephan


ack 을 사용할 수 있습니다. 소스 코드의 grep 과 같습니다. 전체 파일 시스템을 스캔 할 수 있습니다.

그냥 해:

ack 'text-to-find-here'

루트 디렉토리에서

정규 표현식 을 사용하고 파일 형식을 지정할 수도 있습니다.


UPDATE

방금 은색 과 비슷하지만 그보다 3-5 배 빠르며 .gitignore 파일의 패턴을 무시하는 The Silver Searcher를 발견했습니다.




Answer 4 learner_19


당신이 사용할 수있는:

grep -r "string to be searched"  /path/to/dir

r 은 재귀를 나타내 므로 지정된 경로와 하위 디렉토리에서 검색합니다. 파일 이름을 알려주고 문자열이 나타나는 파일의 줄을 인쇄합니다.

또는 모든 자바 스크립트 파일 (* .js)에서 검색하려고하는 것과 비슷한 명령 (예 :) :

find . -name '*.js' -exec grep -i 'string to search for' {} \; -print

텍스트가 나타나는 파일의 행을 인쇄하지만 파일 이름은 인쇄하지 않습니다.

이 명령 외에도 다음과 같이 작성할 수 있습니다. grep -rn "문자열 검색"/ path / to / directory / or / file -r : 재귀 검색 n : 일치하는 줄 번호가 표시됩니다.




Answer 5 A R


이것을 사용할 수 있습니다 :

grep -inr "Text" folder/to/be/searched/