IT

첫 번째 경기 만 잡고

lottoking 2020. 3. 25. 08:37
반응형

첫 번째 경기 만 잡고


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를 눌러야하기 때문에 여기에 넣었습니다.


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

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

참고 URL : https://stackoverflow.com/questions/14093452/grep-only-the-first-match-and-stop

반응형