一致する単語の後の次の一致する単語まで、すべての行をどのように取得できますか?
たとえば、私の入力は次のようになります。
1
2
3
5
6
sed
私から始めなければなりません1到着5私の出力には以下を含める必要があります。1しかし、* 5 *と残りの行は含めたくありません。
私のファイルに含まれていない場合5、残りの行を最後まで維持する必要があります。
メモ:私の質問と重複しているように見える参照リンクが表示されます。タイトルは次のとおりです。一致する2つのパターンの間のテキストのみを表示しかし、それは私の質問に答えません。それに対する答えには、ファイルにない2番目の一致を処理する方法は含まれていませんでした。
答え1
sed '/1/,/5/!d;/5/d'
その行を除き、包含行から始まり、1
その行を含む次の行で終わる行を返します5
。5
埋め込み行の後に埋め込まれた行がない場合、埋め込まれた1
最初の行から1
ファイルの終わりまで印刷が開始されます。
対応するすべてのセクションが印刷されます。
セクションが1つしかない場合、または最初のセクションにのみ興味がある場合は、他のアプローチを使用できます。
sed -n '/1/,$!d; /5/q; p'
これはsed
、同じ行に5が見つかるか、含まれている最初の行の後に読み取りが停止されることを意味します1
。