Shell

sed 的終止問題

  • August 25, 2018

在 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/^[...]命令將未完成。

引用自:https://unix.stackexchange.com/questions/329008