[grep] 첫 번째 경기 만 잡고

grep을 사용하여 첫 번째 일치 항목 만 반환하기를 희망하면서 다음 인수와 함께 디렉토리를 재귀 적으로 검색하고 있습니다. 불행히도, 마지막으로 보았을 때 실제로 두 개 이상을 반환합니다. 특히 원하는 결과를 얻지 못한 채 논쟁이 너무 많은 것 같습니다. :-/

# grep -o -a -m 1 -h -r "Pulsanti Operietur" /path/to/directory

보고:

Pulsanti Operietur
Pulsanti Operietur

아마도 grep이 최선의 방법이 아닐까요? 정말 고마워요



답변

-m 1주어진 파일에서 첫 번째 일치 항목을 반환합니다. 그러나 여전히 다른 파일에서 계속 검색합니다. 또한 같은 줄에 두 개 이상의 일치 항목이 있으면 모두 표시됩니다.

head -1이 문제를 해결하는 데 사용할 수 있습니다 .

grep -o -a -m 1 -h -r "Pulsanti Operietur" /path/to/dir | head -1

각 grep 옵션에 대한 설명 :

-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


답변

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수신됩니다 .SIGPIPEhead

이것은 파일 이름에 개행 문자가 포함되어 있지 않다고 가정했습니다.


답변

내 grep-a-like 프로그램 ack에는 -1어디서나 발견 된 첫 번째 경기에서 멈출 수 있는 옵션이 있습니다. -m 1@mvp도 참조 하는 것을 지원합니다 . 하나의 파일에만 존재하는 것을 찾기 위해 큰 소스 코드 트리를 검색하는 경우 파일을 찾을 필요가 없으므로 Ctrl-C를 눌러야하기 때문에 여기에 넣었습니다.


답변

검색중인 현재 디렉토리에서 특정 단어가 나타나면 전체 줄과 파일 이름을 인쇄하려면 아래 명령을 사용할 수 있습니다.

grep -m 1 -r "Not caching" * | head -1


답변

다음을 사용하는 단일 라이너 find:

find -type f -exec grep -lm1 "PATTERN" {} \; -a -quit


답변