파일의 처음부터 n번째 패턴 발생까지 삭제

파일의 처음부터 n번째 패턴 발생까지 삭제

파일 시작 부분부터 패턴의 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.

관련 정보