マッチ後と次のマッチ前のsed行

マッチ後と次のマッチ前のsed行

一致する単語の後から次の異なる一致する単語までのすべての行を取得するにはどうすればよいでしょうか?

たとえば、私の入力は次のようになります。

1
2
3

5
6

そして私sed15そして私のアウトプットには以下を含める必要があります1しかし、*5*と残りの行は含めたくありません。

ファイルに5、残りの行を最後まで実行する必要があります。

注記:私の質問と重複しているように見える参照リンクを見つけました。タイトルは次のとおりです:一致する2つのパターンの間のテキストのみを表示するしかし、それは私の質問に対する答えではありません。そこにあった答えには、secondmatch がファイルにない場合の処理​​方法は含まれていませんでした。

答え1

sed '/1/,/5/!d;/5/d'

1を含む行から、その次の行 (その行は含まない) までの行を返します。を含む行の後に5を含む行がない場合は、 を含む最初の行からファイルの最後までが印刷されます。511

対応するセクションがすべて印刷されることに注意してください。

セクションが 1 つしかない場合、または最初のセクションのみに興味がある場合は、次の別のアプローチが考えられます。

sed -n '/1/,$!d; /5/q; p'

つまり、sed同じ行に 5 が見つかった後、または を含む最初の行の後に読み取りを停止します1

関連情報