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

能否用sed一次性完成Markdown Frontmatter的增删改操作?

整合sed中Frontmatter的多操作(删除、替换、追加)

你当前用sed处理Markdown笔记的Frontmatter时,已实现替换和追加的批量整合,但删除操作无法限定在Frontmatter范围内,也没法和其他操作整合到一条命令里。之前尝试的命令因语法错误无法运行,下面是正确的实现方式:

正确的整合命令

sed -i.bak \
  -e '/---/,/---/{/heading: accordion/d}' \
  -e '/---/,/---/{/^meta:$/d}' \
  -e '/---/,/---/{/^  path:?$/d}' \
  -e '/---/,/---/s/  creation/__dc/' \
  -e '/---/,/---/s/  revision/__dc/' \
  -e '/---/,/---/s/  copyright/__cr/' \
  -e '/__cr/a\__vs: 6' \
  *.md

语法说明

  • 每个删除操作必须通过-e选项声明,用{}将Frontmatter范围(/---/,/---/)和删除动作绑定,确保仅在Frontmatter区间内匹配指定行并删除,避免误删文档其他部分的内容。
  • 替换操作保持原有写法即可,已通过/---/,/---/限定了作用范围。
  • 追加操作/__cr/a\__vs: 6只会匹配Frontmatter内的行(因为__cr是替换后仅存在于Frontmatter的标识),无需额外限定范围。

优化版本(减少重复扫描)

可以将所有Frontmatter内的操作合并到同一个范围块中,提升执行效率:

sed -i.bak \
  -e '/---/,/---/{
    /heading: accordion/d
    /^meta:$/d
    /^  path:?$/d
    s/  creation/__dc/
    s/  revision/__dc/
    s/  copyright/__cr/
  }' \
  -e '/__cr/a\__vs: 6' \
  *.md

错误原因说明

你之前尝试的命令写法'/---/,/---/ /heading: accordion/d'属于sed语法错误,sed不支持这种连续的模式拼接,必须用{}将范围内的具体动作包裹起来,才能正确关联范围和操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 10:22:44