macOS下用SED定位.mdx文件第二处---行并插入重定向内容的实现方案
macOS 环境下 MDX 文件 frontmatter 重定向插入实现
核心实现逻辑
利用 sed 的 hold 空间做匹配计数器,逐行扫描文件定位第二处整行匹配 --- 的位置(即 MDX frontmatter 的闭合标记),在该位置上方插入重定向配置,全程兼容 BSD 版本 sed(macOS 原生自带),支持原地修改文件。
可直接复用的脚本片段
假设你已经在 Shell 中定义了存储重定向路径的变量:
# 示例变量定义,可根据实际逻辑替换值 REDIRECT_PATH="/some/kind/of/directory/path"
执行以下 sed 命令即可完成目标文件的修改:
sed -i '' ' # 跳过不是整行匹配 --- 的内容 /^---$/!b # 交换模式空间和hold空间,读取计数器值 x # 首次匹配到---时,计数器为空,初始化计数器为1 /^$/ { s/^$/1/ x b } # 走到这里说明是第二次匹配到---,更新计数器 s/1/2/ x # 在当前第二处---的行上方插入两行配置 i\ redirects:\ - '"${REDIRECT_PATH}"' ' 目标文件路径.mdx
关键注意事项
- 适配 macOS 特性:BSD 版本 sed 要求原地修改时必须显式指定备份后缀,使用
-i ''表示不保留临时备份文件,和 Linux 环境下-i的效果一致 - 变量传入兼容:sed 的单引号脚本块默认不展开 Shell 变量,通过「闭合单引号-拼接双引号包裹的变量值-重新打开单引号」的方式,可安全将 Shell 中的路径值传入插入内容,无需额外转义
- 匹配精度:规则使用
^---$严格匹配整行只有三个短横线的内容,不会误匹配正文里零散出现的三个短横线,完全符合 MDX frontmatter 的格式规范 - 位置无关性:计数器逻辑不依赖固定行号,无论第二处
---在文件的第几行,只要是第二次出现就会触发插入逻辑,适配不同长度的 frontmatter 内容
内容的提问来源于stack exchange,提问作者rhetoric101
相关产品推荐
相关产品推荐

