Проблема с завершением работы с 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

Я предполагаю, что что-то не так с escape-символами в $ u , но я просто не могу понять это.

Как заставить работать мой sed ?

0
26.08.2018, 00:13
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/^[...] будет незавершенной.

1
28.01.2020, 02:47

Теги

Похожие вопросы