La expansión de la variable sed no funciona (comando `s' no terminado)

La expansión de la variable sed no funciona (comando `s' no terminado)

Tengo un archivo llamado config.yaml que contiene esta línea:

device_connection_string: "<ADD DEVICE CONNECTION STRING HERE>"

Quiero reemplazar <ADD DEVICE CONNECTION STRING HERE>con el valor de la siguiente variable:

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#

Cuando ejecuto este comando sed, aparece el error s no terminado:

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

¡Gracias por su ayuda!

Respuesta1

Resulta que CSTRINGcontiene una nueva línea literal.

Al habilitar la depuración de shell podemos ver lo que sedve:

$ 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

y es el sed 's/<ADD DEVICE CONNECTION STRING HERE>/que está causando el

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

error.

información relacionada