
ファイルの先頭からパターンのn番目の発生まで行を省略するコマンドラインツール(awk、sedなど)コマンドを見つけます。つまり、n番目のパターン発生からファイルの終わりまでのみ印刷します。 1行に1つの一致が必ずしもパターンで始まるとは限りません。
たとえば、ファイルの先頭から2番目の部分まで、以下を省略します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
。