bash - sed: -e 表达式 #1, char 93: 未终止的 `s' 命令
问题描述
我正在使用以下脚本:
#!/bin/bash
echo "============================"
#Convert jpeg file to base64 format
var=`base64 HTMLImage1.jpg`
echo $var
sed -i 's|HTMLImage3.png|'"${var}"'|' Test.html
echo "============================"
将 jpg 文件转换为 base64 文件格式,然后将第一次出现的字符串“HTMLImage3.png”替换为 base64 编码的字符串。我在我的控制台上得到了 base64 编码,所以这没有问题。但是,在用 base64 编码的字符串替换字符串“HTMLImage3.png”时,我遇到了以下问题:
sed: -e 表达式 #1, char 93: 未终止的 `s' 命令
下面是示例 base64 编码字符串:
iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAhw0lEQVR4Ae1daXRV13XemkeEsAQI
EPNsMAgw2MvGxkAIeIiTeIhdN3FjMvxokq60XaurWe2fZrlD1mrXSptVp7HjuHHS2ElwYyexMTZO
iB0bBDYYIUYxz6ABoXl6Ur/v3Heerp7uu3p6urLVp71t3r3vnnP2Oec7+ztnn+FdpfRAREURUAQ8
EUj3fKoPFQFFwCCgBFFDUAR8EFCC+ICjQYqAEkRtQBHwQUAJ4gOOBikCShC1AUXABwEliA84GqQI
KEHUBhQBHwSUID7gaJAioARRG1AEfBBQgviAo0GKgBJEbUAR8EFACeIDjgYpAkoQtQFFwAcBJYgP
OBqkCChB1AYUAR8ElCA+4GiQIqAEURtQBHwQUIL4gKNBioASRG1AEfBBQAniA44GKQJKELUBRcAH
ASWIDzgapAgoQdQGFAEfBJQgPuBokCKgBFEbUAR8EFCC+ICjQYqAEkRtQBHwQUAJ4gOOBikCShC1
AUXABwEliA84GqQIKEHUBhQBHwSUID7gaJAioARRG1AEfBBQgviAo0GKgBJEbUAR8EFACeIDjgYp
AkoQtQFFwAcBJYgPOBqkCChB1AYUAR8ElCA+4GiQIqAEURtQBHwQUIL4gKNBioASRG1AEfBBQAkS
BqfHB6TRGJQyGivtUWclSBgUNQgP69BHMqoJ0oNhIwXMqG1sl/v+fae0dIYkHQ9G62iSgrq3AYOZ
Rbmy5eu3SnZGqsFiNHceo5sgaP4U/NcR6pZdR2tFWrtEUlPRb45SirC36AjJ2cn50s3eg8LLKGbI.....
我的 base64 编码字符串也包含“/”字符。shell 脚本中的 sed 命令有什么不正确的地方吗?
解决方案
这可能对您有用(GNU sed 和 bash):
sed -E 's#(.*)HTMLImage3.png(.*)#echo "\1$(base64 -w0 HTMLImage1.jpg)\2"#e' file
用传递给 base64 的所需文件的输出替换所需的字符串。
注意 整行必须在替换命令的 RHS 中表示,因此必须在echo
命令中捕获并重新显示匹配的左右内容。base64的-w0
选项删除用于包装输出的任何换行符。
推荐阅读
- reactjs - 在 DraftJS 中执行异步装饰?
- azure - 无法连接到 AKS 服务终结点
- excel - 如何在 Excel VBA 中创建 HTTP GET
- angular - 直到交互才创建 AgGrid 自定义过滤器
- python - 从汇总和分组的数据帧中删除 0
- java - 如何完成关于 Erathostenes 筛子的代码?
- javascript - 如何为视口中的部分进行检测转换(转到提供的链接观看视频)
- git - 带有完整文件路径的 Git diff -name-only
- python - 具有来自 numpy 的特定 x 值的 Python 绘图线
- powershell - foreach 循环结果进入电子邮件正文