텍스트에 특정 단어가 포함된 파일 나열

텍스트에 특정 단어가 포함된 파일 나열

특정 단어가 포함된 파일을 재귀적으로 고유하게 나열하고 싶습니다.

: "check"라는 단어를 확인하세요. 제가 주로 하는 일은 grep입니다.

$ grep check * -R

그런데 단어가 여러번 나오니까 출력이 많이 나오네요. 따라서 특정 검색어가 포함된 파일 이름만 나열하면 됩니다. 나는 find몇 가지 트릭을 사용하고 처리하는 것만으로도 xargs충분할 것이라고 생각 하지만 확실하지는 않습니다.

어떤 아이디어가 있나요?

답변1

-l또는 옵션을 사용하여 --files-with-matches다음과 같이 기록합니다.

일반 출력을 억제합니다. 대신 print는 일반적으로 각 입력 파일의 이름을 인쇄합니다. 검색은 첫 번째 일치에서 중지됩니다. ( -lPOSIX에서 지정)

따라서 귀하의 예에서는 다음을 사용할 수 있습니다.

$ grep check * -lR

답변2

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

디렉토리를 내려갈 때 심볼릭 링크 옵션을 따르기 위해 -R최신 버전의 GNU를 사용하고 싶지 않을 수도 있습니다 . 버전 2.12(2012년 4월)부터 더 이상 심볼릭 링크를 따르지 않는 grep이 옵션을 사용하세요 .-r

grep 버전이 GNU가 아니거나 2.12 이전이거나 코드를 선도적이지 않은 GNU 시스템으로 포팅해야 하는 경우 find위 명령을 사용하십시오.

그렇지 않으면 다음과 같이 할 수 있습니다.

grep -rl check .

사용하지 마십시오 *(이것은 현재 디렉토리(및 현재 디렉토리에서만)의 숨겨진 파일을 무시하고 이름이 로 시작하는 파일에 문제를 일으킬 수 있으므로 -), 환경에 따라 작동이 보장되지 않으므로 인수 뒤에 옵션을 전달하지 마십시오. 그리고 휴대용이 아닙니다.

답변3

이 시도:

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

grep깃발 의 경우 ..

-c파일 이름과 : 및 해당 파일에서 검색 문자열이 나타나는 횟수를 나타내는 숫자가 반환됩니다.

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

답변4

grep -rin "whatToFind" locationToFINd

예를 들어 $ grep -rin "vihaan"입니다.

"vihaan", "."이 포함된 파일 이름과 해당 줄이 반복적으로 검색되어 나열됩니다. 현재 디렉터리를 나타냅니다.

관련 정보