【发布时间】:2020-11-25 10:20:18
【问题描述】:
我正在使用以下脚本:
#!/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 expression #1, char 93: unterminated `s' command
以下是 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命令有什么不正确的地方吗?
【问题讨论】:
-
如果我将 base64 输出直接通过管道传输到 sed 命令,而不是将其保存在变量中。那么我将如何指定我必须替换字符串的 base64 编码字符串。我试过执行:base64 HTMLImage1.jpg|sed -i 's|HTMLImage3\.png|'"${var}"'|' Test.html 但它没有帮助,因为现在 var 变量中没有值。所以在我的输出中 HTMLImage3.png 被空字符串替换。
-
我不必替换包含“HTMLImage3.png”字符串的整行,而只需将文本“HTMLImage3.png”替换为base64编码的字符串。
-
我的第一个建议是更改输出的存储方式。
var=`base64 HTMLImage1.jpg | sed '$!s/$/\\/'` -
#!/bin/bash echo "============================" #将jpeg文件转换为base64 格式 var=
base64 HTMLImage1.jpg | sed '$!s/$/\\/'echo $var sed -i 's|HTMLImage3\.png|'"${var}"'|' Test.html #base64 HTMLImage1.jpg|sed -i 's|HTMLImage3\.png|'"${var}"'|' Test.html 回显“=============================”。使用您的建议,现在我收到以下错误:sed: -e expression #1, char 8: unterminated `s' command. -
我认为
sed不喜欢命令中的换行符。终止管道字符应与s命令的开头位于同一行。