grep이 일치하지 않는 파일을 표시하지 않도록 하는 방법은 무엇입니까?

grep이 일치하지 않는 파일을 표시하지 않도록 하는 방법은 무엇입니까?

특정 단어가 포함된 파일 찾기를 사용하려고 합니다 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의 답변과 유사하게 목록을 -lgrep에 대한 파일 입력으로 사용할 수도 있습니다.
grep -r "pattern" -c $(grep -rl "pattern")
grep의 색상을 보존할 수 있지만 백그라운드에서 동일한 작업을 수행할 수 있습니다.

관련 정보