В сценарии 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
Я предполагаю, что что-то не так с escape-символами в $ 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/^[...]
будет незавершенной.