GNU를 사용하여 전체 라인을 패턴과 일치시키고 싶다고 가정하면 다음과 sed
같이 작동합니다.
sed -n '/^dog 123 4335$/ { :a; n; p; ba; }' infile
표준 동등 물 :
sed -ne '/^dog 123 4335$/{:a' -e 'n;p;ba' -e '}' infile
다음 입력 ( infile
)으로 :
cat 13123 23424
deer 2131 213132
bear 2313 21313
dog 123 4335
cat 13123 23424
deer 2131 213132
bear 2313 21313
출력은 다음과 같습니다.
cat 13123 23424
deer 2131 213132
bear 2313 21313
설명:
/^dog 123 4335$/
원하는 패턴을 검색합니다.
:a; n; p; ba;
는 입력 ( n
) 에서 새 줄을 가져 와서 인쇄 ( p
) 한 다음 다시 레이블 a로 분기 하는 루프입니다 :a; ...; ba;
.
최신 정보
다음은 요구 사항에 더 가까운 대답입니다 (예 : file2의 패턴, file1에서 grepping).
tail -n +$(( 1 + $(grep -m1 -n -f file2 file1 | cut -d: -f1) )) file1
포함 된 grep 및 cut은 file2의 패턴을 포함하는 첫 번째 행을 찾습니다.이 행 번호에 1을 더한 후 꼬리에 전달하고 더하기 1은 패턴이있는 행을 건너 뜁니다.
첫 번째 경기가 아닌 마지막 경기에서 시작하려면 다음과 같습니다.
tail -n +$(( 1 + $(grep -n -f file2 file1 | tail -n1 | cut -d: -f1) )) file1
모든 버전의 tail이 더하기 표기법을 지원하지는 않습니다.