grep 일치하지 않는 파일의 표시를 억제하는 방법?


11

를 사용하여 특정 단어가 포함 된 파일을 찾으려고합니다 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스위치에 대해 알고 있지만 원하지 않는 완전한 출력을 억제합니다.

어떻게합니까?


2
일반적으로 grep일치하지 않는 파일의 파일 이름을 인쇄하지 않아야합니다. 실제로 grep는 내용 0이 일치 하는 줄을 고려하는 것처럼 보입니다 . 사용중인 정확한 검색 패턴을 게시 할 수 있습니까?
Adrian Heine

내가 사용한 완전한 grep cmd는 grep 'delete' * -R이지만 -R문제를 일으키지 않는다고 생각 합니다. 그리고 그렇습니다, 그것은 일반적으로 일치하지 않는 것을 인쇄하지 않지만, 여기에 어떤 사건이 있는지 확실하지 않습니다 ...
mtk

@step @everyone .. Strange ... 위의 수정 된 게시물을 본 후. 나는 grep -- 'delete' *(추가 --) 시도 하고 예상대로 작동했습니다. 를 제거하면 --위의 디스플레이로 연결됩니다.
mtk

1
@Stephane 실제로 당신은 맞습니다. 나는 dir을 검색했고 name이라는 파일이있었습니다 -ci. 문제를 해결해 주셔서 감사합니다. 이 시나리오를 답변으로 게시 할 수 있습니다.
mtk

답변:


9

이것이 님의 행동 grep -c입니다.

아마도 이름이 문자로 시작 -하고 c문자를 포함 하는 파일이 있고 POSIXLY_CORRECT환경 변수 를 설정하지 않고 GNU grep을 사용하고있을 것입니다.

사용하다:

grep -- delete *

또는 더 나은 :

grep delete ./*

--파일 이름이 옵션으로 간주되지 않도록 옵션의 끝을 표시합니다 (POSIX grep를 사용하면 옵션이 아닌 delete인수가 옵션 의 끝을 표시했기 때문에 그렇지 않습니다). 라는 파일 -. 은 grep delete ./*더 강력하지만 추가를 출력하는 단점이있다 ./(즉, 개행 문자가 포함 된 파일 이름을 식별하는 데 도움이 있기 때문에 그 보너스로 간주 될 수 있지만) 일치하는 파일을.


12

더하다

| grep -v ':0$'

매우 우아하지는 않지만 일을 할 것이라고 생각합니다.

-l명령에 추가하면 일치 항목 만 제공되지만 각 파일에 대한 일치 항목 수는 표시되지 않습니다.


1
-l일했다. 해결 방법도 좋습니다. 감사합니다
mtk

4
grep을 줄 수 있어야 grep -v ':0$'하므로 단지 줄 끝의 사람들은 (그러나, 일치하는 grep -l방식이 훨씬 더 오래 당신이 줄 수를 필요로하지 않는 것입니다)
mreithub

9

를 사용 grep -l하면 하나 이상의 일치하는 파일 만 가져옵니다.

파일에 몇 개의 일치 항목이 있는지에 대한 정보가 필요합니까? -c파일에서 일치하는 수를 계산하는 데 사용 되는를 사용하여 건너 뛸 수 있기 때문 입니다.

편집 : 그리고 warlock -I이 바이너리 파일에서 일치를 억제 하는 데 사용 하는 것도 좋은 생각 일 수 있습니다.


0

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)이 여기에 온다는 것을 알고 있습니다.)


0

Laurentiu의 답변과 -l마찬가지로 grep의 파일 입력으로 목록을 사용할 수도 있습니다.
grep -r "pattern" -c $(grep -rl "pattern")
grep의 색상을 유지할 수는 있지만 백그라운드에서 동일한 작업을 수행합니다.


공백이나 와일드 카드가 포함 된 파일 이름 및 디렉토리는 실수로 분할되어 결과적으로 일치합니다.
제프 쉘러
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.