Hugo前置元数据标签格式转换求助(正则表达式支持)
Hugo迁移:批量转换YAML标签格式为字符串列表
下面是几种可行的批量转换方案,覆盖常用编辑器和命令行工具:
编辑器方案
VSCode
- 打开项目文件夹,按下
Ctrl+Shift+F打开全局搜索替换面板 - 勾选「使用正则表达式」选项(按钮为
.*) - 搜索内容:
^tags: (.*)$ - 替换内容:
tags: ["${1/, /", "/g}"] - 点击「替换全部」完成全局转换
Neovim
在Neovim中打开项目目录,执行以下Ex命令:
:g/^tags:/s/tags: \(.*\)/tags: ["\=substitute(submatch(1), ', ', '", "', 'g')"]/
该命令会全局匹配所有以tags:开头的行,自动将逗号分隔的标签转换为带引号的字符串列表。
命令行工具方案
sed
在项目根目录执行以下命令,批量处理所有Markdown文件:
sed -i.bak -E 's/^tags: (.*)$/tags: ["\1"]/; s/, /", "/g' content/posts/*.md
-i.bak:修改文件时自动创建备份(可省略,建议保留以防出错)- 先将
tags:后的内容包裹进方括号,再将,替换为", "完成标签引号添加
awk
使用awk实现更灵活的处理,命令如下:
awk '/^tags:/ { sub(/^tags: /, "", $0) gsub(/, /, "\", \"", $0) print "tags: [\"" $0 "\"]" } !/^tags:/ { print }' content/posts/*.md > temp.md && mv temp.md content/posts/*.md
- 匹配
tags:开头的行,先移除前缀,再替换分隔符,最后拼接成目标格式 - 非
tags:行保持原样输出,最后覆盖原文件(操作前建议手动备份)
内容的提问来源于stack exchange,提问作者Andrew Matthews
相关产品推荐
相关产品推荐

