如何用sed/awk将Markdown中斜体文件名改为反引号包裹格式
批量修改Markdown文件中斜体文件名的命令方案
一、核心sed命令(单目录处理)
使用sed工具可高效完成批量替换,命令如下:
sed -i.bak -E 's/\*([^*]*)([[:alnum:]_-]+(\.[[:alnum:]_-]+)+)\*/\*\1`\2`\*/g' *.md
命令说明:
-i.bak:原地修改.md文件,同时自动生成.md.bak备份文件,避免误操作丢失原内容-E:启用扩展正则表达式,简化分组写法- 匹配规则:
\*:匹配斜体开头的星号(正则中*是特殊字符,需转义)([^*]*):捕获斜体内文件名前的所有非星号内容(包括空格、普通文本)([[:alnum:]_-]+(\.[[:alnum:]_-]+)+):捕获带扩展名的文件名,支持多句点格式(如this.four.word.file.amp),允许文件名包含字母、数字、下划线、连字符
- 替换规则:
\*\1\2\*:保留原斜体的星号和文件名前的文本,将捕获到的文件名用反引号包裹
二、递归处理子目录中的.md文件
如果需要处理当前目录及所有子目录下的.md文件,结合find命令:
find . -type f -name "*.md" -exec sed -i.bak -E 's/\*([^*]*)([[:alnum:]_-]+(\.[[:alnum:]_-]+)+)\*/\*\1`\2`\*/g' {} +
三、测试与验证
修改前建议先预览替换效果,避免直接修改文件:
sed -E 's/\*([^*]*)([[:alnum:]_-]+(\.[[:alnum:]_-]+)+)\*/\*\1`\2`\*/g' 目标文件名.md
确认输出符合预期后,再使用带-i.bak的命令执行修改。
四、清理备份文件
确认修改无误后,可删除自动生成的备份文件:
- 单目录:
rm *.md.bak - 递归清理:
find . -name "*.md.bak" -delete
内容的提问来源于stack exchange,提问作者Jesse
相关产品推荐
相关产品推荐

