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

如何用sed按标题删除Markdown文件中的指定段落?

用sed删除Markdown指定标题及其段落

原始文件(markdown.md)

# Title1

line 1
line 2
line 3

# Title2

line 1
line 2
line 3

期望输出

# Title2

line 1
line 2
line 3

尝试的错误命令及报错

尝试的命令:

cat markdown.md | sed '/^# Title1.*/,+1d {/^\s*$/d}'

报错信息:

sed: 1: "/^# Title1.*/,+1d { ...": extra characters at the end of d command

正确解决方案

命令1:

sed '/^# Title1$/{:a;N;/^\n$/!ba;d}' markdown.md

命令2(-n模式更直观):

sed -n '/^# Title1$/{:loop; n; /^[[:space:]]*$/!b loop; d;}; p' markdown.md

命令解释

核心思路是匹配目标标题后,持续读取后续行直到遇到空行,再删除这段范围内的所有内容:

  • 以命令1为例:
    1. /^# Title1$/:精准匹配目标标题行
    2. {:a;N;/^\n$/!ba;d}:执行多行处理逻辑
      • :a:定义循环标记a
      • N:将下一行内容追加到当前模式空间(合并多行)
      • /^\n$/!ba:如果模式空间结尾不是空行(还没到段落分隔的空行),跳回标记a继续读行
      • d:删除整个模式空间内的内容(从标题行到空行前的所有行)
  • 命令2用-n关闭默认输出,仅打印未被处理的行:匹配标题后循环读行,直到空行就删除这段内容,其余行正常打印。

错误原因

你之前的命令存在语法错误:sed中d(删除)是独立命令,不能在d后直接跟{}命令组。必须将多行处理逻辑放在地址匹配后的命令块中,通过循环实现“读取直到空行”的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:39:07