반응형
첫 번째 경기 만 잡고
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
수신됩니다 .SIGPIPE
head
이것은 파일명에 개행을 포함하지 않는 것으로 가정했습니다.
내 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
반응형
'IT' 카테고리의 다른 글
오류 : (1, 0) ID가 'com.android.application'인 플러그인을 찾을 수 없습니다 (0) | 2020.03.25 |
---|---|
R 스크립트에서 명령 행 매개 변수를 읽으려면 어떻게해야합니까? (0) | 2020.03.25 |
Dockerfile에서 PATH 환경 변수를 업데이트하는 방법은 무엇입니까? (0) | 2020.03.25 |
FOREIGN KEY 제약 조건을 도입하면 사이클 또는 여러 계단식 경로가 발생할 수 있습니다. 왜 그렇습니까? (0) | 2020.03.25 |
Pandas 데이터 프레임의 두 열에 함수를 적용하는 방법 (0) | 2020.03.25 |