match1 の前の n 行と match2 まで match1 の後の行を印刷します。

match1 の前の n 行と match2 まで match1 の後の行を印刷します。

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

関連情報