Uso de sed com aspas duplas

Uso de sed com aspas duplas

Respondendo aessa questão:

Encontrei a seguinte situação com seda 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";

Quero remover a string "host-name" apenas 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" em input_file, deixando-a como estava.

Se eu não usar aspas duplas:

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

Ele fornece corretamente o resultado esperado.

Achei que a maneira correta seria usar aspas duplas, mas não consigo entender por que não está funcionando aqui.

Responder1

O personagem "não é especial para o shell dentro de '... '. Na verdade, por dentro '...' nenhum personagem é especialpara a casca; como consequê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 por "   h o s t n a m e , ", que não encontrará porque não está lá.

informação relacionada