Respondendo aessa questão:
Encontrei a seguinte situação com sed
a 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á.