텍스트에 특정 단어가 포함 된 파일을 나열하십시오.


30

주어진 단어를 포함하는 파일을 재귀적이고 독창적으로 나열하고 싶습니다.

: 'check'이라는 단어를 확인하면 정상입니다 grep입니다

$ grep check * -R

그러나이 단어가 많이 나올수록 많은 결과를 얻습니다. 따라서 주어진 검색어가 포함 된 파일 이름 만 나열하면됩니다. 나는 여기에 약간의 트릭을 추측 find하고 xargs충분하다고 생각 하지만 확실하지는 않습니다.

어떤 아이디어?

답변:


39

다음과 같이 문서화 된 -l또는 --files-with-matches옵션을 사용하십시오 .

정상 출력을 억제합니다. 대신 출력이 정상적으로 인쇄 될 각 입력 파일의 이름을 인쇄하십시오. 첫 번째 경기에서 스캔이 중지됩니다. ( -lPOSIX에 의해 지정됩니다.)

예를 들어 다음을 사용할 수 있습니다.

$ grep check * -lR

MSYS에서도 작동합니다. 큰!
코스

2
나는 사용 grep -rl "text to find" "/usr/share"했고 훌륭하게 일했다!
Shrout1

18
find . -type f -exec grep -l check {} +

디렉토리를 내릴 때 -R최신 버전의 GNU에서 grep심볼릭 링크를 따르는 옵션 을 사용하고 싶지 않을 것입니다 . -r버전 2.12 (2012 년 4 월)부터 더 이상 심볼릭 링크를 따르지 않는 옵션을 대신 사용하십시오 .

grep이 GNU가 아니거나 버전 2.12보다 오래된 경우 또는 비 -Bedge-GNU 시스템에 이식 가능한 코드가 필요한 경우 find위 명령을 사용하십시오 .

그렇지 않으면 다음을 수행 할 수 있습니다.

grep -rl check .

사용하지 마십시오 *(현재 디렉토리 (및 현재 디렉토리에서만)에서 숨겨진 파일을 생략하고 이름이으로 시작하는 파일에 문제를 일으킬 수 있음 -), 인수에 따라 옵션을 전달하지 마십시오 환경과 휴대용이 아닙니다.


1

이 시도:

find . -type f | xargs grep -c check $1 | grep -v ":0"

에 관해서는 grep플래그 ...

-c 주어진 파일에 검색 문자열이 몇 번 나타나는지 나타내는 파일 이름과 :을 반환합니다.

-v첫 번째 grep검색 결과를 가져 와서 결과가 0 인 파일을 필터링하고 결과가 0이 아닌 파일 만 인쇄합니다.


이름이 포함 된 파일 (또는 디렉터)이있는 경우 잘못된 음성이 표시됩니다 :0. 하는 것이 좋습니다 grep -v ':0$'. 그럼에도 불구하고 줄 바꿈이 포함 된 경로 이름에 질식합니다.
Scott

0

grep-rin "whatToFind"locationToFInd

예 : $ grep-rin "vihaan"

파일 이름과 "vihaan"이있는 해당 행 "."을 재귀 적으로 검색하고 나열합니다. 현재 디렉토리를 나타냅니다.


0
find . -type f | grep "keyword" *

현재 디렉토리에서 검색하십시오. 루트에서 조회하려면 /대신 지정하십시오..


0

grep -lR "text-to-find" <where-to-find> 또한 잘 작동합니다.

예를 들어 현재 디렉토리에서 grep -lR "NAVIGATE" .단어 NAVIGATE를 찾을 수 .있습니다.


-2
 grep -rli trim \` find . -name *.q \` 

.q키워드가 포함 된 파일 목록을 제공하십시오trim

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.