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包含一個字面換行符。

透過啟用 shell 調試,我們可以看到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

錯誤。

相關內容