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 コマンドを実行すると、終了していない 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

エラー。

関連情報