
파일 시작 부분부터 패턴의 n번째 발생까지 줄을 생략하는 명령줄 도구(awk, sed 등) 명령을 찾고 있습니다. 다르게 말하면 n번째 패턴 발생부터 파일 끝까지만 인쇄합니다. 한 줄에 하나씩 일치한다고 가정합니다. 줄이 반드시 패턴으로 시작될 필요는 없습니다.
foo
예를 들어 다음에서는 파일 시작부터 두 번째까지 생략합니다 .
something
abc foo1
maybe something else
foo2 -this line and anything before is gone-
maybe not
foo3
something
원하는 결과:
maybe not
foo3
something
n 번째 발생 라인을 포함/제외하는 데 대한 보너스 포인트입니다.
답변1
에게들어오지 못하게 하다n 번째 패턴 발생
awk -v 'n=3' 'NR == 1, /pattern/ && !--n {next}; 1'
( 3
원하는 발생 횟수(귀하의 경우 2)와 pattern
실제 패턴( foo
귀하의 경우)으로 바꾸세요).
예:
$ seq 30 | awk -v 'n=3' 'NR == 1, /6/ && !--n {next}; 1'
27
28
29
30
에게포함하다n 번째 패턴 발생
awk -v 'n=3' '/pattern/ && !--n, 0'
예:
$ seq 30 | awk -v 'n=3' '/6/ && !--n, 0'
26
27
28
29
30
답변2
% perl -ne 'BEGIN{$NTH=2;$p=0} print if $p; /foo/ && $NTH--; $p=1 if !$NTH' input
maybe not
foo3
something
NTH
몇 번이고 인쇄할 플래그가 필요한 곳은 어디 입니까? NTH
일치 시 감소 하고 NTH
충분히 감소하면 인쇄를 활성화합니다.print
원하는 궁극기를 잡기 위해 끝까지 이동하세요 foo
.