특정 단어가 포함된 파일을 재귀적으로 고유하게 나열하고 싶습니다.
예: "check"라는 단어를 확인하세요. 제가 주로 하는 일은 grep입니다.
$ grep check * -R
그런데 단어가 여러번 나오니까 출력이 많이 나오네요. 따라서 특정 검색어가 포함된 파일 이름만 나열하면 됩니다. 나는 find
몇 가지 트릭을 사용하고 처리하는 것만으로도 xargs
충분할 것이라고 생각 하지만 확실하지는 않습니다.
어떤 아이디어가 있나요?
답변1
-l
또는 옵션을 사용하여 --files-with-matches
다음과 같이 기록합니다.
일반 출력을 억제합니다. 대신 print는 일반적으로 각 입력 파일의 이름을 인쇄합니다. 검색은 첫 번째 일치에서 중지됩니다. (
-l
POSIX에서 지정)
따라서 귀하의 예에서는 다음을 사용할 수 있습니다.
$ 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", "."이 포함된 파일 이름과 해당 줄이 반복적으로 검색되어 나열됩니다. 현재 디렉터리를 나타냅니다.