를 사용하여 특정 단어가 포함 된 파일을 찾으려고합니다 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
지정된 일치 항목이 포함되지 않은 파일입니다. 그 줄이 stdout에 표시되는 것을 억제하고 싶습니다. 나는 -q
스위치에 대해 알고 있지만 원하지 않는 완전한 출력을 억제합니다.
어떻게합니까?
답변
이것이 님의 행동 grep -c
입니다.
아마도 이름이 문자로 시작 -
하고 c
문자를 포함 하는 파일이 있고 POSIXLY_CORRECT
환경 변수 를 설정하지 않고 GNU grep을 사용하고있을 것입니다.
사용하다:
grep -- delete *
또는 더 나은 :
grep delete ./*
--
파일 이름이 옵션으로 간주되지 않도록 옵션의 끝을 표시합니다 (POSIX grep를 사용하면 옵션이 아닌 delete
인수가 옵션 의 끝을 표시했기 때문에 그렇지 않습니다). 라는 파일 -
. 은 grep delete ./*
더 강력하지만 추가를 출력하는 단점이있다 ./
(즉, 개행 문자가 포함 된 파일 이름을 식별하는 데 도움이 있기 때문에 그 보너스로 간주 될 수 있지만) 일치하는 파일을.
답변
더하다
| grep -v ':0$'
매우 우아하지는 않지만 일을 할 것이라고 생각합니다.
-l
명령에 추가하면 일치 항목 만 제공되지만 각 파일에 대한 일치 항목 수는 표시되지 않습니다.
답변
를 사용 grep -l
하면 하나 이상의 일치하는 파일 만 가져옵니다.
파일에 몇 개의 일치 항목이 있는지에 대한 정보가 필요합니까? -c
파일에서 일치하는 수를 계산하는 데 사용 되는를 사용하여 건너 뛸 수 있기 때문 입니다.
편집 : 그리고 warlock -I
이 바이너리 파일에서 일치를 억제 하는 데 사용 하는 것도 좋은 생각 일 수 있습니다.
답변
0이 아닌 카운트를 잡는 방법 :
grep -rIcH 'string' . | grep -v ':0$'
-r
하위 디렉토리를 반복합니다.-I
바이너리 파일을 무시하십시오 ( @tongpu , warlock 덕분에 ) .-c
일치 횟수를 표시합니다. 성가신 것은 0 카운트 파일을 포함합니다.-H
파일이 하나라도 파일 이름을 표시합니다.'string'
당신의 줄은 여기로갑니다..
현재 디렉토리에서 시작하십시오.| -v ':0$'
0 카운트 파일을 제거하십시오. (감사합니다 @LaurentiuRoescu )
(OP가 의도하지 않게 -c를 계산했지만 google (grep nonzero count)이 여기에 온다는 것을 알고 있습니다.)
답변
Laurentiu의 답변과 -l
마찬가지로 grep의 파일 입력으로 목록을 사용할 수도 있습니다.
grep -r "pattern" -c $(grep -rl "pattern")
grep의 색상을 유지할 수는 있지만 백그라운드에서 동일한 작업을 수행합니다.