Uso de sed com aspas duplas

2

Respondendo a esta pergunta :

Encontrei a seguinte situação com sed versão 4.2.2.

A partir desta entrada:

send host-name = gethostname();
    domain-name, domain-name-servers, domain-search, host-name,
#  option host-name "andare.swiftmedia.com";

Eu quero remover a string "host-name" somente da segunda linha, então a saída esperada é:

send host-name = gethostname();
    domain-name, domain-name-servers, domain-search,
#  option host-name "andare.swiftmedia.com";

Então usei o seguinte comando:

sed -e 's/" host-name,"//g' input_file

No entanto, ele não removerá a string "host-name", no input_file, deixando-a como estava.

Se eu não usar aspas duplas:

sed -e 's/ host-name,//g' input_file

Dá corretamente o resultado esperado.

Eu achei que a maneira correta seria usar a citação dupla, mas não consigo entender por que ela não está funcionando aqui.

    
por Zumo de Vidrio 28.11.2017 / 12:34

1 resposta

6

O caractere " não é especial para o shell em ' ... ' . De fato, dentro de ' ... ' nenhum caractere é especial para o shell; como conseqüência, os caracteres " são passados para sed ; e eles não são especiais para sed .

O comando sed -e 's/" host-name,"//g' está procurando, literalmente, "   h o s t n a m e , " , que não vai encontrar porque não está lá.

    
por 28.11.2017 / 12:43

Tags