Sed解析markdown中的图片链接

⌚Time: 2024-11-06 23:27:00

👨‍💻Author: Jack Ge

我需要把markdown里面图片链接转换成本地链接。这是由ai生成的命令,测试好用

sed -E "s/!\[([^]]+)\]\(([^)]+)\)/![\1](Converted/$(basename \2))/g" input.md > output.md

只能linux系统下运行,因为只有linux系统有$命令替换用法,basename是一个获取文件名小工具,-E是启用扩展正则表达式。

解析

markdown里面的图片格式是![描述](地址)用法。所以要匹配的就是这种格式,然后转成本地地址

匹配

!\[([^]]+)\]\(([^)]+)\)是匹配部分

!匹配!\[匹配[([^]]+)匹配任何不是]的部分直到遇到]\]匹配]

\(匹配(([^)]+)匹配任何不是)的部分直到遇到)\)匹配)

替换

![\1](Converted/$(basename \2))是替换部分

!!,Converted是自己加的本地路径名字。\1是捕获组的第一部分也就是第一个()里面的图片描述。\2是捕获组第二部分,也就是第二个()里面的地址部分。$(basename \2)是命令替换,用basename把图片地址解析成图片名字。

结果

[图片](http:www.abc.com/test.jpg)会被替换成[图片](Converted/test.jpg)

问题

用sed处理文件里包含中文时卡死。并且文件编码为utf-8。简单的办法就是把中文字符文件转换成gbk格式,也就是windows文本编辑器的另存为,ANSI格式。或者用iconv工具转换成gbk格式文件。