태그 보관물: stdout

stdout

grep 일치하지 않는 파일의 표시를 억제하는 방법? (> 500). 내가 명령을

를 사용하여 특정 단어가 포함 된 파일을 찾으려고합니다 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의 색상을 유지할 수는 있지만 백그라운드에서 동일한 작업을 수행합니다.


답변