답변:
-m 1
주어진 파일에서 첫 번째 일치 항목을 반환합니다. 그러나 여전히 다른 파일에서 계속 검색합니다. 또한 같은 줄에 두 개 이상의 일치 항목이 있으면 모두 표시됩니다.
head -1
이 문제를 해결하는 데 사용할 수 있습니다 .grep -o -a -m 1 -h -r "Pulsanti Operietur" /path/to/dir | head -1
-o, --only-matching, print only the matched part of the line (instead of the entire line)
-a, --text, process a binary file as if it were text
-m 1, --max-count, stop reading a file after 1 matching line
-h, --no-filename, suppress the prefixing of file names on output
-r, --recursive, read all files under a directory recursively
-r
분명히 제외하고 ) 아프지 않아야합니다 ( -a
그렇지만 사용 하지는 않겠습니다 )
grep -m 1
때문에 두 인스턴스를 모두 반환했습니다. |head -1
해결했다!
first not first from result
. 이 답변은 모든 파일에서 첫 번째 일치 항목을 인쇄하고 중지합니다. 그 밖의 무엇을 기대 했습니까?
stdbuf 와 함께 grep
결과를 파이프 할 수 있습니다 .head
N 번째 일치 후 중지를 보장하려면 출력을 버퍼링하지 않도록 stdbuf
사용해야 grep
합니다.
stdbuf -oL grep -rl 'pattern' * | head -n1
stdbuf -oL grep -o -a -m 1 -h -r "Pulsanti Operietur" /path/to/dir | head -n1
stdbuf -oL grep -nH -m 1 -R "django.conf.urls.defaults" * | head -n1
한 head
줄 을 소비 하자마자 종료 되어 파이프에 무언가를 출력했기 때문에 grep
수신됩니다 .SIGPIPE
head
이것은 파일 이름에 개행 문자가 포함되어 있지 않다고 가정했습니다.
xargs
: find . -name '*.gz' | xargs -I '{}' stdbuf -oL zgrep -al 'pattern' {} | head -n 1
. 그러나 이것은 첫 번째 경기에서 종료되지 않습니다. 어떤 충고?
grep
의 --line-buffered
옵션은 추가적인 유틸리티를 호출하지 않고 오버 헤드 버퍼 방지?
내 grep-a-like 프로그램 ack
에는 -1
어디서나 발견 된 첫 번째 경기에서 멈출 수 있는 옵션이 있습니다. -m 1
@mvp도 참조 하는 것을 지원합니다 . 하나의 파일에만 존재하는 것을 찾기 위해 큰 소스 코드 트리를 검색하는 경우 파일을 찾을 필요가 없으므로 Ctrl-C를 눌러야하기 때문에 여기에 넣었습니다.
ag
빨리 될 수도 있지만 그것은 하지 않습니다 이 -1
이 경우에 유용합니다 옵션