Расширение переменной sed не работает (незавершенная команда `s')

Расширение переменной sed не работает (незавершенная команда `s')

У меня есть файл с именем config.yaml, содержащий следующую строку:

device_connection_string: "<ADD DEVICE CONNECTION STRING HERE>"

Я хочу заменить <ADD DEVICE CONNECTION STRING HERE>значением следующей переменной:

root@ubuntu1804-ko-001:/tmp# echo "$CSTRING"

HostName=PulseAzure-BetterTogetherDemo.azure-devices.net;DeviceId=ubuntu1804-ko-001;SharedAccessKey=xdWDu2gnzlg8X1mHgGqYU+yECBYUJ065n1AjdkYNCWI=
root@ubuntu1804-ko-001:/tmp#

При запуске этой команды sed я получаю ошибку unterminated s:

sed -i "s/<ADD DEVICE CONNECTION STRING HERE>/$CSTRING/g" config.yaml
sed: -e expression #1, char 38: unterminated `s' command

Спасибо за помощь!

решение1

Оказывается, это CSTRINGбуквально означает новую строку.

Включив отладку оболочки, мы можем увидеть, что sedвидит:

$ set -x
$ sed "s/<ADD DEVICE CONNECTION STRING HERE>/$CSTRING/g" config.yaml
+ sed 's/<ADD DEVICE CONNECTION STRING HERE>/
HostName=PulseAzure-BetterTogetherDemo.azure-devices.net;DeviceId=ubuntu1804-ko-001;SharedAccessKey=xdWDu2gnzsfsdfdsfds=/g' config.yaml

и это sed 's/<ADD DEVICE CONNECTION STRING HERE>/то, что является причиной

sed: -e expression #1, char 38: unterminated `s' command

ошибка.

Связанный контент