sed:1つのコマンドで条件付き行を削除する

sed:1つのコマンドで条件付き行を削除する

次のサンプルテキストがあるとしますexample.txt

<para>This is some paragraph text
This is another line of paragraph text.
</para>

私が達成したいこと:すべてのタグを空の文字列に置き換え、結果の<para></para>が空の場合は行を削除します。次の2つのコマンドを使用してこれを達成しました。

# remove the line that solely consist of the para tag.
$ sed -i '/^<para>$/d;/^<\/para>$/d' ./example.txt

# Replace any of the para tags with an empty string.
$ sed -i 's/<para>//g;s/<\/para>//g' ./example.txt

私の質問:sedコマンドで条件付き行削除を使用してこれを達成できますか?

ベストアンサー1

GNU sedがある場合、T交換が失敗した場合は、次のコマンドを使用して空白行の削除に分岐できます。

sed 's/<\/\{0,1\}para>//g;T;/^$/d' example.txt
T label

最後に、入力行を読み取った後、または条件分岐を実行してから正常な置換がない場合にのみラベルに分岐します。ラベルは省略できます。この場合、次のサイクルが開始されます。

tGNU以外のsedを使用する場合は、合計を組み合わせて同じことを行うことが可能でなければなりません。b

sed -e 's/<\/\{0,1\}para>//g;ta;b' -e ':a;/^$/d' example.txt

おすすめ記事