この質問に対する答え:
一致するパターン間の複数の行シーケンスは気にしません。例えば、sed -n '/startpattern_here/,/endpattern_here/p'
これらのパターンが現れる間に一連の複数行が印刷される。
しかし、単に印刷したいとしましょう。最後ファイルにこれらの順序があります。 sedを使用してこれを実行できますか?そうでなければ、おそらく奇妙に思えますか?他にはありませんか?
メモ:
- これらのシーケンスは重複しないと仮定することができる。
- 開始および終了パターンラインしなければならない出力に含まれます。
- 複雑さの低いパターンを想定する答えも有効です(最適ではありませんが)。
ベストアンサー1
完全正規表現テストが必要な場合は、次のように動作します。
awk '/startpattern_here/ {buf="";f=1}
f{buf=buf $0 "\n"}
/endpattern_here/ {f=0; lastcomplete=buf}
END{printf("%s",lastcomplete)}' file.txt
これにより、完全な開始 - 停止パターンのみが印刷されます。
テストケース:
irrelevant
irrelevant
irrelevant
startpattern_here
relevant_but_dont_show_1
relevant_but_dont_show_1
relevant_but_dont_show_1
endpattern_here
irrelevant
irrelevant
startpattern_here
relevant_but_dont_show_2
relevant_but_dont_show_2
relevant_but_dont_show_2
endpattern_here
irrelevant
irrelevant
startpattern_here
relevant_and_show
relevant_and_show
relevant_and_show
endpattern_here
irrelevant
startpattern_here
incomplete_dont_show
結果:
startpattern_here
relevant_and_show
relevant_and_show
relevant_and_show
endpattern_here
ノート開始モードと終了モードの出力を抑制するには、sumsルールを変更するだけです/startpattern_here/ { ... }
。/endpattern_here/ { ... }
つまり、「終了モード」ルールを最初に配置し、END
次に「開始モード」ルールを配置するだけです。