【问题标题】:sed replace base64 encoded images in bulksed 批量替换 base64 编码图像
【发布时间】:2015-10-28 10:15:03
【问题描述】:

我正在尝试使用 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 还是很陌生;我预计正则表达式匹配或转义有问题。

谢谢!

【问题讨论】:

    标签: regex sed


    【解决方案1】:

    当您将ssed 一起使用时,它将替换它匹配的整个模式,因此您可能不希望.* 在您实际要替换的模式的开头和结尾处。

    您还可以在 sed 中使用与 / 不同的分隔符,如果您在替换的任何一部分中都有 /,就像在路径中一样,这很方便。所以我们可以尝试不同的替换,例如:

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

    这将找到以"data:image 开头并以下一个" 结尾的所有内容,我猜这会起作用,尽管您没有提供太多示例数据来显示+" 是否真的很重要,或者" 本身就足够了。

    我们可以测试这个匹配

    $ echo '<img src="data:image/svg+xml;base64,+">' | sed 's_"data:image[^"]*"_/path/to/image_g'
    <img src=/path/to/image>
    

    所以你可以在你的 find 中使用 sed 命令。我假设您使用的是 gnu 的 sed,因为您使用的是 -i 这样的。如果您有不同的 sed,您可能还需要修复该部分命令。

    【讨论】:

    • 谢谢 - '+' 只是图像编码的结尾,而 '"' 只是包装的结尾 'src=" "' 我测试了你的编辑,它工作得很好- 我在图像周围添加了引号以替换路径 's_"data:image[^"]*"_"/path/to/image.png"_g' 非常感谢您的回答 - 我学到了一些关于 'sed' 的新知识今天!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 2013-10-01
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多