開始パターンと終了パターンの間の線を印刷します。ただし、終了パターンがないと印刷しません。

開始パターンと終了パターンの間の線を印刷します。ただし、終了パターンがないと印刷しません。

一致する2つのパターン間の線を探しています。開始または終了パターンが欠落している場合、その行は印刷されません。

正しい入力:

a
***** BEGIN *****
BASH is awesome
BASH is awesome
***** END *****
b

出力は次のとおりです

***** BEGIN *****
BASH is awesome
BASH is awesome
***** END *****

ここで、入力からENDパターンが欠落していると仮定します。

a
***** BEGIN *****
BASH is awesome
BASH is awesome
b

行を印刷しないでください。

私はsedを試してみました。

sed -n '/BEGIN/,/END/p' input

ENDモードがない場合は、最後の行まですべてのデータを印刷します。

どうやって解決しますか?

ベストアンサー1

次のようにこれを行うことができます。

$ sed -e '
    /BEGIN/,/END/!d
    H;/BEGIN/h;/END/!d;g
' inp

どのように機能するかは、行の始まり/終わりの範囲に対してストレージスペースに保存することです。次に、END行が出るまで削除します。この時、私たちは私たちが持っているものが何であるかを思い出させます。 OTW、私たちは何も得ません。 HTH。

おすすめ記事