在 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
?
答案1
您需要在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/^[...]
命令将未完成。