grep -B n -A m matchを使用して、マッチングの前後にn行とm行を印刷する方法を知っています。また、sedを使用してmatch1からmatch2に印刷する方法も知っています。しかし、これを1行にどのように組み合わせることができますか?
> cat file.txt
bar
foo
bar
baz
match1
qux
blah
bleep
match2
boop
blah
n=2 の出力例:
bar
baz
match1
qux
blah
bleep
match2
答え1
同じ入力を共有するようにコマンドをグループ化して引き継ぎをgrep
終了するときは、次のようにします。sed
{ grep -B2 -m1 match1; sed '/match2/q'; } < infile
答え2
コマンドの出力をコマンドgrep
にパイプしてみますか?sed
例えば、
grep <options> file | sed <options>
答え3
sed はストリームエディタです。したがって、以前に消えた行を印刷するには、後で使用するためにバッファに保存する必要があります。そのため、まずバッファ 1{N;N} に 2 行を保持し、N;D コマンドで保持します。
sed -rn '1{:X N;N};
/match1[^\n]*$/{:Y N; /match2[^\n]*$/{p;n;bX}; bY};
N;D' infile