sed 的终止问题

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

答案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/^[...]命令将未完成。

相关内容