Shell
sed 的終止問題
在 sed 腳本中,我有以下行,需要通過以下方式更新
sed
:opennic="nameserver 95.85.9.86\nnameserver 185.83.217.248\nnameserver 193.183.98.154\nnameserver 5.9.49.12"
該
sed
命令如下所示:sed -i.bak s/^opennic=\".*\"/opennic=\"${u}\"/g /absolute/path/to/script.sh
並且
$u
是:nameserver 104.238.153.178\\nnameserver 141.138.157.53\\nnameserver 45.63.91.109\\n
我得到的錯誤資訊是:
sed: -e expression #1, char 35: unterminated `s' command
我認為 中的轉義字元有問題
$u
,但我就是無法解決問題。我如何讓我
sed
的工作?
您需要為
sed
命令使用雙引號:$ sed -i.bak "s/^opennic=\".*\"/opennic=\"${u}\"/g" /absolute/path/to/script.sh
如果沒有引號,sed 將使用多個參數執行。
$u
通過其空格將變數拆分為多個參數。類似於以下內容(每一行是一個不同的參數):
$ sed \ 's/^opennic=".*"/opennic="nameserver' \ '104.238.153.178\\nnameserver' \ [...]`
在那裡,第一個
s/^[...]
命令將未完成。