私は次のコードを使用して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
、空行自体では実行されません。