一致する行の前に他のものと一致する最初の行に戻る前に、grepを使用してコンテキスト行を表示しますか?

一致する行の前に他のものと一致する最初の行に戻る前に、grepを使用してコンテキスト行を表示しますか?

一致が見つかり、grep -eその一致のすべての行を別の一致として再度印刷したいとします----。たとえば。

これは可能ですか、それともこれを行うには他のコマンドや他のものを使用する必要がありますかawk

たとえば、次のファイルがあるとします。

----
Ticket Number: 5465415312

Software Services
Notepad
Text

Description: 
My Notepad won't type text.

出力は次のようになります。

----
Ticket Number: 5465415312

Software Services

もう一度一致します----Software Services

答え1

sed -n '/----/,/Software Services/{p;/Software Services/q}' file

出力:

----
チケット番号:5465415312

ソフトウェアサービス

答え2

以下を使用してawkこれを行う簡単な方法は次のとおりです。

awk '/^----$/,/^Software Services$/' file

長くバイパス的なアプローチ:

awk '/^----$/              { lines = "" }
                           { lines = (lines == "" ? $0 : lines ORS $0) }
     /^Software Services$/ { print lines }' file

つまり、lines4つのダッシュラインを押すたびに保存された文字列が消去されます。これにより、現在の行が常に追加され、入力データで「トリガ」行が見つかると、lines何が印刷されます。lines

関連情報