空白行が表示されるまで、検索パターンに続く行を削除します。

空白行が表示されるまで、検索パターンに続く行を削除します。

私は次のコードを使用して00 PROGRAMファイル内の複数のブロックを正常に見つけ、そのブロックの次の行をすべて削除しましたが、XYZ

sed -n '/00 PROGRAM/,/^$/{/./{h;d}; x;/XYZ/p}' file 

今はその逆が必要です。Group cat次の空/空行に達するまで、ブロックの次の行だけを見つけて削除します。初期ファイルはpatternファイルに保存する必要があります。ファイルには空行が残っている必要があります。他のテキスト行もファイルに残る必要があります。誰もがこの構造が正しく機能するように変更を提案したり、新しいコード行を提案したりできますか?

コードが実行される前:

 Group cat
 Group div
 Group member1
 Group member2
 Group select
      <empty line>
Common cat
Last update

コードが実行された後:

Group cat
     <empty line>
Common cat
Last update

次に、次のパターンマッチングを検索し、そのブロックの行を削除するなどの操作を実行します。

答え1

以下は目的の出力を生成します。

sed -e '/Group cat/,/^$/{//b' -e '/./d;}' file

最初のGroup cat行では、bコマンドが実行され、スクリプトの最後に分岐し、その行が印刷されます(デフォルトの動作)。

コマンドは次の空行まで他のすべての行で実行されますがd、空行自体では実行されません。

関連情報