파일의 처음부터 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충분히 감소하면 인쇄를 활성화하는 플래그가 필요합니다.NTHprint궁극적으로 원하는 것을 포착하려면 끝으로 이동하십시오 foo.

관련 정보