특정 단어가 포함된 파일 찾기를 사용하려고 합니다 grep
. 디렉터리에 많은 파일이 있습니다(>500).
내가 실행한 명령
$ grep 'delete' *
산출
validate_data_stage1:0
validate_data_stage2:0
validate_data_stage3:0
validate_data_stage4:0
validate_data_stage5:0
validate_input_stage1:0
validate_input_stage2:0
validate_input_stage3:0
validate_input_stage4:0
.... and hundred of such lines
이는 특정 일치 항목을 포함하지 않는 파일입니다. 이 줄이 표준 출력에 표시되지 않도록 하고 싶습니다. 나는 -q
스위치에 대해 알고 있지만 이것은 내가 원하지 않는 전체 출력을 억제합니다.
어떻게 해야 하나요?
답변1
다음에 추가
| grep -v ':0$'
그다지 우아하지는 않지만 제 생각에는 그 일을 할 것이라고 생각합니다.
명령을 추가하면 -l
일치 항목만 제공되지만 파일당 일치 항목 수는 인쇄되지 않습니다.
답변2
를 사용하면 grep -l
일치하는 항목이 하나 이상 포함된 파일만 가져옵니다.
파일에 일치 항목이 몇 개 있는지에 대한 정보가 필요합니까? -c
파일에서 일치하는 항목 수를 계산하는 데 사용을 건너뛸 수 있기 때문입니다 .
편집: Warlock이 말했듯 -I
이 바이너리에서 억제 일치를 사용하는 것도 좋은 생각일 수 있습니다.
답변3
이것이 나타난 동작입니다 grep -c
.
-
어쩌면 이름이 문자로 시작 하고 문자를 포함하는 파일이 있고 환경 변수를 c
설정하지 않고 GNU grep을 사용하고 있을 수도 있습니다.POSIXLY_CORRECT
사용:
grep -- delete *
또는 더 나은:
grep delete ./*
--
파일 이름이 옵션으로 처리되지 않도록 옵션의 끝을 표시합니다(POSIX grep의 경우 옵션이 아닌 delete
인수가 옵션의 끝을 표시하므로 처리되지 않습니다). 그러나 이라는 파일 이름 문제는 해결되지 않습니다 -
. 더 강력 합니다 grep delete ./*
. 단점은 ./
일치하는 파일에 대해 추가 콘텐츠를 출력한다는 것입니다(비록 이것이 개행 문자가 포함된 파일 이름을 식별하는 데 도움이 되므로 이점으로 간주될 수 있음).
답변4
Laurentiu의 답변과 유사하게 목록을 -l
grep에 대한 파일 입력으로 사용할 수도 있습니다.
grep -r "pattern" -c $(grep -rl "pattern")
grep의 색상을 보존할 수 있지만 백그라운드에서 동일한 작업을 수행할 수 있습니다.