使用 sed 删除文本的标记部分以及文件中的下一行

问题描述 投票:0回答:1

如果我有一个像这样的文件,其中标签之间的文本部分长度可变。

--
-- <tag1>
-- some text
-- </tag1>
--
-- <tag2>
-- </tag2>
--
-- <tag3>
-- other stuff
-- </tag3>
--

我正在尝试使用 sed 删除 tag2 部分及其后面的行,所以我最终得到以下结果:

--
-- <tag1>
-- some text
-- </tag1>
--
-- <tag3>
-- other stuff
-- </tag3>
--

我知道我可以使用以下内容删除 tag2 部分中的所有内容,不包括该部分之后的行,但我不知道如何扩展它以删除下一行。

sed -e '/<tag2>/,/<\/tag2>/d' file

我认为这会是这样简单的事情,但这对于没有像 tag2 这样的内容的标记部分不起作用。它适用于 tag1 或 tag3。

sed -e '/<tag2>/,/<\/tag2>/{N;d}' file

sed
1个回答
0
投票

这应该可以用 GNU 来完成工作

sed
:

sed '/<tag2>/,/<\/tag2>/{ /<\/tag2>/{ N }; d }' file

输出:

--
-- <tag1>
-- some text
-- </tag1>
--
-- <tag3>
-- other stuff
-- </tag3>
--
© www.soinside.com 2019 - 2024. All rights reserved.