grep을 사용하여 파일의 첫 번째 줄에서만 특정 문자열을 검색하는 방법은 무엇입니까?

grep을 사용하여 파일의 첫 번째 줄에서만 특정 문자열을 검색하는 방법은 무엇입니까?

grep을 사용하여 파일에서 문자열을 찾으면서 해당 파일의 첫 번째 줄만 검색하려면 어떻게 해야 합니까?

답변1

두 가지 옵션이 더 있습니다:

그리고awk

awk '{if ($0~"pattern") print $0; nextfile;}' mydir/*

또는 귀하의 awk버전이 이를 지원하지 않는 경우 nextfile(제안해 주신 Stéphane Chazelas에게 감사드립니다):

awk 'FNR==1{if ($0~"pattern") print $0;}' mydir/*

다음 파일로 전환하기 전에 첫 번째 줄만 읽고 일치하는 경우에만 인쇄됩니다 "pattern".

장점은 필드를 미세 조정하여 패턴(예: $2두 번째 필드에서만 검색) 및 출력(예: $3세 번째 필드 인쇄 또는 FILENAME혼합 인쇄)을 검색할 수 있다는 것입니다.

("현재 입력 레코드 번호", 즉 줄 번호) 버전을 사용하면 FNRgrep하는 줄을 더 세밀하게 조정할 수 있습니다. FNR==3세 번째 줄은 10, FNR<10첫 번째 줄은 10 등입니다. (이 경우 매우 큰 파일을 다루고 있고 버전에서 이를 지원하는 경우 성능 향상을 위해 awk혼합하는 것이 좋을 수 있습니다 .)FNRnextfile

사용 head, 파일 이름 유지

head -n1 -v mydir/files*|grep -B1 pattern

-v옵션은 head파일 이름을 인쇄하고, 옵션은 일치하는 줄 앞의 줄, 즉 파일 이름을 인쇄 -B1합니다 . grep파일 이름만 필요한 경우 다음으로 추가로 파이프할 수 있습니다 grep .

head -n1 -v mydir/*|grep -B1 pattern|grep ==>

don_crissti가 댓글에서 알아차린 것처럼 패턴 자체와 일치하는 파일 이름을 기록해 두세요. 하지만...

답변2

GNU 사용 grep:

grep -m1 ^ * |grep 'pattern'

재귀적으로:

grep -rm1 ^ . |grep 'pattern'

답변3

@Rob의 의견을 구현하고 예상한 결과를 성공적으로 얻었습니다.

string문자열로 바꾸십시오 .

grep -Rin "string" . | grep ":1:.*string" > result.txt

현재 디렉터리에서 대소문자를 구분하지 않는 재귀 검색을 수행 string하고 줄 번호를 인쇄합니다. 그런 다음 파일의 1행에서 일치하는 항목을 검색하고 출력을 result.txt.

답변4

sed 명령을 사용해 볼 수도 있습니다.

sed -n '1p' filename| sed -n '/pattern/p'

관련 정보