如果我有一个像这样的文件,其中标签之间的文本部分长度可变。
--
-- <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
这应该可以用 GNU 来完成工作
sed
:
sed '/<tag2>/,/<\/tag2>/{ /<\/tag2>/{ N }; d }' file
输出:
--
-- <tag1>
-- some text
-- </tag1>
--
-- <tag3>
-- other stuff
-- </tag3>
--