You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用sed删除文件中指定标签段落及后续行?

用sed删除指定标签段落及后续行的解决方法

问题场景

现有文件内容如下:

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

需要删除<tag2>对应的整个段落,以及该段落之后的一行(即单独的--行),最终得到:

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

尝试过的无效方法

  • sed -e '/<tag2>/,/<\/tag2>/d' file:仅能删除<tag2>到</tag2>的内容,无法删除后续的--行。
  • sed -e '/<tag2>/,/<\/tag2>/{N;d}' file:仅对包含内容的标签段落生效,对空内容的<tag2>段落无效。

正确实现命令

sed -e '/<tag2>/{:loop; N; /<\/tag2>\n/!b loop; N; d;}' file

命令解释

  1. 当匹配到包含<tag2>的行时,进入自定义循环loop:
  2. N:将下一行追加到当前缓冲区中;
  3. /<\/tag2>\n/!b loop:如果缓冲区末尾还没匹配到</tag2>加换行符(即还没读到</tag2>行),就回到循环开头继续读取下一行;
  4. 当读到</tag2>行后,再执行一次N读取后续的那一行(即目标删除的--行);
  5. d:删除当前缓冲区中的所有内容(也就是<tag2>段落+后续行)。

这个命令不管<tag2>段落内是否有内容,都能精准删除目标区块及后续行。

内容的提问来源于stack exchange,提问作者JohnR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 20:23:10