sed: -e выражение # 1, char 93: незавершенная команда `s ' - PullRequest
0 голосов
/ 05 августа 2020

Я использую следующий сценарий:

#!/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 на своей консоли, поэтому в этом нет проблем. Но при замене строки «HTMLImage3.png» строкой в ​​кодировке base64 я получаю следующую проблему:

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 также содержит символ «/». Есть ли что-то неправильное в команде sed в сценарии оболочки?

1 Ответ

0 голосов
/ 05 августа 2020

Это может сработать для вас (GNU sed и bash):

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

Замените требуемую строку выводом необходимого файла, переданного в base64.

NB Весь Строка должна быть представлена ​​в правой части команды подстановки, поэтому содержимое слева и справа от совпадения должно быть захвачено и повторно отображено в команде echo. Параметр -w0 для base64 удаляет любые переводы строки, используемые для переноса вывода.

...