sed批量替换base64编码图像

时间:2015-10-28 10:15:04

标签: regex sed

我尝试使用sed以递归方式从文件中查找/替换多个base64编码图像。

每个嵌入的图片均以src="data:image/svg+xml;base64,开头,以+"

结尾

我已经尝试过了,但无法让它发挥作用:find . -type f -name "*.txt" -exec sed -i 's/.*src=\"data\:image\([^;]*\)+\".*/\/path\/to\/image.png/g' {} +

我对正则表达式和sed很新;我期待正则表达式匹配或转义错误。

谢谢!

1 个答案:

答案 0 :(得分:0)

当您ssed一起使用时,它会替换它匹配的整个模式,因此您可能不希望.*在开始时你真正想要替换的模式的结尾。

您也可以使用sed而不是/的不同分隔符,如果您在路径中的替换部分中有/,则会很方便。所以我们可以尝试不同的替换,如:

sed 's_"data:image[^"]*"_/path/to/image.png_g' your_file

这会找到以"data:image开头并以下一个"结尾的所有内容,我猜测它会起作用,但您没有提供大量示例数据来显示是否<{1}}非常重要,或者+"本身就足够了。

我们可以用

测试这场比赛
"

因此,您可以在查找中使用$ echo '<img src="data:image/svg+xml;base64,+">' | sed 's_"data:image[^"]*"_/path/to/image_g' <img src=/path/to/image> 命令。我假设您正在使用gnu的sed,因为您正在使用此类sed。如果您有不同的sed,您可能也需要修复命令的这一部分。