我尝试使用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很新;我期待正则表达式匹配或转义错误。
谢谢!
答案 0 :(得分:0)
当您s
与sed
一起使用时,它会替换它匹配的整个模式,因此您可能不希望.*
在开始时你真正想要替换的模式的结尾。
您也可以使用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,您可能也需要修复命令的这一部分。