首页 > 解决方案 > 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 命令有什么不正确的地方吗?

标签: bashshellunixsedsh

解决方案


这可能对您有用(GNU sed 和 bash):

sed -E 's#(.*)HTMLImage3.png(.*)#echo "\1$(base64 -w0 HTMLImage1.jpg)\2"#e' file

用传递给 base64 的所需文件的输出替换所需的字符串。

注意 整行必须在替换命令的 RHS 中表示,因此必须在echo命令中捕获并重新显示匹配的左右内容。base64的-w0选项删除用于包装输出的任何换行符。


推荐阅读