Sed-Variablenerweiterung funktioniert nicht (nicht beendeter „s“-Befehl)

Sed-Variablenerweiterung funktioniert nicht (nicht beendeter „s“-Befehl)

Ich habe eine Datei namens config.yaml, die diese Zeile enthält:

device_connection_string: "<ADD DEVICE CONNECTION STRING HERE>"

Ich möchte <ADD DEVICE CONNECTION STRING HERE>durch den Wert der folgenden Variablen ersetzen:

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#

Wenn ich diesen Sed-Befehl ausführe, erhalte ich den Fehler „nicht beendetes s“:

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

Ich danke Ihnen für Ihre Hilfe!

Antwort1

Es stellt sich heraus, dass es CSTRINGeinen wörtlichen Zeilenumbruch enthält.

Durch Aktivieren des Shell-Debuggings können wir sehen, was sedsieht:

$ 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

und das ist es, sed 's/<ADD DEVICE CONNECTION STRING HERE>/was die

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

Fehler.

verwandte Informationen