特定の行を一致させ、以下を除くすべての行を印刷します。

特定の行を一致させ、以下を除くすべての行を印刷します。

スレッドに似た指示があります。一致する行と一致する行内のn行目を印刷します。

特定の行を一致させて印刷し、次の行(下の最初の行)を削除してから、特定の行が一致するまで残りの行を印刷する必要があります。

つまり、で</s>始まる行の後に続く行だけを削除するだけです<doc

私のファイル:

<doc>
</s>
<s>
Bla
bla
bla
.
</s>
<s>
Bla
bla
bla
.
</s>
</doc>
<doc>
</s>
...

私が望む出力:

<doc>
<s>
Bla
bla
bla
.
</s>
<s>
Bla
bla
bla
.
</s>
</doc>
<doc>
...

ベストアンサー1

sed基本的な知識があれば、この質問を理解するのは難しくありません。

sed '/<doc>/{n;/<\/s>/d;}'

がある行の場合は、<doc>印刷して次の行を読み、次の行nに含まれている場合</s>(スラッシュをエスケープする必要があります)として削除しますd

もう少し詳しく説明すると、/expression/{command;command;...;}パターンと一致する行にのみコマンドを実行するという意味なので、他の行はすべてそのまま出力され、その行<doc>に対してはn実行されます。このコマンドは現在の行を印刷して次の行を読み取るので、次の行で次のコマンドが実行されます。ここでも別のコマンド()がd「アドレス」()と一緒に表示されるため、埋め込まれた行だけが削除され、/<\/s>/それ以外の場合は印刷されます。どちらの場合も、スクリプトは次の行を実行し続けます。d</s>

おすすめ記事