Bashでn番目の発生後に複数行を印刷します。

Bashでn番目の発生後に複数行を印刷します。

n番目のパターン発生を検索し、パターンの後にk行を印刷する方法を探しています。この状況awkよりは良いと思いますが、grepどうすれば正しくできるのかわかりませんね…。

次のテキストファイルがあるとしましょう。

Draft  
blablablabla  
tralalalalala  
Draft  
blablablabla  
tralalalalala  
Draft  
important line 1  
important line 2  
Draft   
blablablabla   
tralalalalala  

この例では、n=3k=2Draft」パターンが3番目に表示された後に2行を印刷したいと思います。私の特別なケースでは、nとkが異なる場合があります。

これは簡単な方法ですか?

ベストアンサー1

Perlが構造に来ます:

 perl -sne '$c++ if /Draft/;
            if ($c == $n) { print scalar <> for 1 .. $k; }
           ' -- -n=3 -k=2 < input
  • -sスイッチを解析して-n=3変数を作成します。
  • -n入力を1行ずつ読みます。
  • <>ダイヤモンド演算子は入力から読み取られます。
  • スカラー入力から1行だけ読む必要があります。そうでなければ印刷ダイヤモンド演算子にコンテキストを強制的にリストし、残りのすべての行を印刷します。

おすすめ記事