it-swarm-korea.com

Grep을 사용하여 Linux에서 파일 이름 만 표시하려면 어떻게해야합니까?

Linux에서 grep을 사용하여 파일 이름 만 표시 (인라인 일치 없음)하는 방법은 무엇입니까?

나는 보통 다음과 같은 것을 사용하고있다.

find . -iname "*php" -exec grep -H myString {} \;

파일 이름 (경로 포함)을 어떻게 얻을 수 있습니까? xargs을 사용해야합니까? 내 grep man 페이지에서이 작업을 수행 할 방법을 찾지 못했습니다.

877
cwd

grep -l 표준 옵션 (소문자 L)이이를 수행 할 수 있습니다.

유닉스 표준에서 :

-l
    (The letter ell.) Write only the names of files containing selected
    lines to standard output. Pathnames are written once per file searched.
    If the standard input is searched, a pathname of (standard input) will
    be written, in the POSIX locale. In other locales, standard input may be
    replaced by something more appropriate in those locales.

이 경우 -H도 필요하지 않습니다.

1339
Random832

grep(1) 맨 페이지에서 :

  -l, --files-with-matches
          Suppress  normal  output;  instead  print the name of each input
          file from which output would normally have  been  printed.   The
          scanning  will  stop  on  the  first match.  (-l is specified by
          POSIX.)
115

간단한 파일 검색을 위해 grep의 -l-r 옵션을 사용할 수 있습니다.

grep -rl "mystring"

모든 검색은 grep에 의해 수행됩니다. 물론 다른 매개 변수에서 파일을 선택해야하는 경우 찾기가 올바른 해결책입니다.

find . -iname "*.php" -execdir grep -l "mystring" {} +

execdir 옵션은 각 디렉토리마다 각 grep 명령을 작성하고 파일 이름을 하나의 명령 (+)으로 연결합니다.

29
user2350426