주어진 단어가 포함 된 파일을 재귀 적으로 고유하게 나열하고 싶습니다.
예 : “check”라는 단어를 확인하는 것은 보통 grep입니다.
$ grep check * -R
하지만이 단어가 많이 나오기 때문에 출력이 많이 나옵니다. 따라서 주어진 검색어가 포함 된 파일 이름을 나열하면됩니다. find
및 xargs
에 대한 몇 가지 트릭으로 충분할 것 같지만 확실하지 않습니다.
아이디어가 있습니까?
답변
-l
또는 --files-with-matches
옵션은 다음과 같이 문서화되어 있습니다.
정상 출력 억제; 대신 출력이 일반적으로 인쇄되는 각 입력 파일의 이름을 인쇄하십시오. 첫 번째 경기에서 스캔이 중지됩니다. (
-l
는 POSIX에서 지정합니다.)
따라서 예를 들어 다음을 사용할 수 있습니다.
$ grep check * -lR
댓글
답변
find . -type f -exec grep -l check {} +
최신 버전의 GNU에서 -R
옵션을 사용하고 싶지는 않을 것입니다. div id = “30ccdcbc3b”>
는 디렉토리 내림차순시 심볼릭 링크를 따릅니다. 버전 2.12 (2012 년 4 월) 이후 더 이상 심볼릭 링크를 따르지 않는 -r
옵션을 대신 사용합니다.
귀하의 grep이 GNU 버전이 아니거나 2.12 이전 버전이거나 코드를 블리딩 에지가 아닌 GNU 시스템으로 이식해야하는 경우 find
명령을 사용하세요.
그렇지 않으면 다음을 수행 할 수 있습니다.
grep -rl check .
*
(현재 디렉토리 (및 현재 디렉토리에만 있음)에서 숨겨진 파일을 생략하고 이름이 -
로 시작하는 파일에 문제를 일으킬 수 있으므로), 전달하지 마십시오. 인수 후 옵션은 보장되지 않습니다. 환경에 따라 작동하도록되어 있으며 휴대용이 아닙니다.
답변
다음을 시도하십시오.
find . -type f | xargs grep -c check $1 | grep -v ":0"
grep
플래그의 경우 …
-c
는 파일 이름 뒤에 : 및 주어진 파일에 검색 문자열이 나타나는 횟수를 나타내는 숫자를 반환합니다.
-v
는 첫 번째
검색, 결과가없는 파일을 필터링하고 결과가 0이 아닌 파일 만 인쇄합니다.
댓글
- 이름에
:0
가 포함 된 파일 (또는 디렉터)이있는 경우 위음성이 표시됩니다. 'grep -v ':0$'
를 수행하는 것이 좋습니다. 심지어 줄 바꿈이 포함 된 경로 이름에서 질식합니다.
Answer
grep -lR "text-to-find" <where-to-find>
도 잘 작동합니다.
예 : grep -lR "NAVIGATE" .
.
에서 NAVIGATE
단어를 찾습니다. div> 현재 디렉토리에 있습니다.
Answer
grep -rin “whatToFind”locationToFInd
예 $ grep -rin “vihaan”.
파일 이름과 “vihaan”이 포함 된 해당 줄 “.”을 재귀 적으로 검색하고 나열합니다. 현재 디렉토리를 나타냅니다.
답변
find . -type f | grep "keyword" *
현재 디렉토리에서 검색합니다. 루트에서 조회하려면 .
대신 /
를 지정하십시오.
Answer
grep -rli trim \` find . -name *.q \`
.q
파일 목록에 trim
grep -rl "text to find" "/usr/share"
를 사용했고 훌륭하게 작동했습니다!