Problema de terminação com sed

0

Em um script sed, tenho a seguinte linha, que precisa ser atualizada por sed :

opennic="nameserver 95.85.9.86\nnameserver 185.83.217.248\nnameserver 193.183.98.154\nnameserver 5.9.49.12"

O comando sed tem esta aparência:

sed -i.bak s/^opennic=\".*\"/opennic=\"${u}\"/g /absolute/path/to/script.sh

e $u são:

nameserver 104.238.153.178\nnameserver 141.138.157.53\nnameserver 45.63.91.109\n

A mensagem de erro que recebo é:

sed: -e expression #1, char 35: unterminated 's' command

Eu suponho que há algo errado com os caracteres de escape em $u , mas eu simplesmente não consigo colocar o dedo nela.

Como faço para que meu sed funcione?

    
por boolean.is.null 08.12.2016 / 17:37

1 resposta

1

Você precisa usar aspas duplas para o comando sed :

$ sed -i.bak "s/^opennic=\".*\"/opennic=\"${u}\"/g" /absolute/path/to/script.sh

Sem aspas, o sed será executado com vários argumentos. Dividindo a variável $u em vários argumentos por seus espaços.

Algo como o seguinte (cada linha é um argumento diferente):

$ sed \
  's/^opennic=".*"/opennic="nameserver' \
  '104.238.153.178\nnameserver' \
  [...]'

E aí, o primeiro comando s/^[...] não será completado.

    
por 08.12.2016 / 18:08