Uso de sed con comillas dobles

Uso de sed con comillas dobles

Respondiendo aesta pregunta:

Encontré la siguiente situación con sedla versión 4.2.2.

De esta entrada:

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

Quiero eliminar la cadena "nombre de host" solo de la segunda línea, por lo que el resultado esperado es:

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

Luego utilicé el siguiente comando:

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

Sin embargo, no eliminará la cadena "host-name" en input_file dejándola como estaba.

Si no uso comillas dobles:

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

Proporciona correctamente el resultado esperado.

Pensé que la forma correcta sería utilizar comillas dobles, pero no puedo entender por qué no funciona aquí.

Respuesta1

El personaje "no es especial por el caparazón que hay dentro '... 'De hecho, en el interior '...' ningún personaje es especialpara el caparazón; como consecuencia, los "caracteres pasan a sed; y no son especiales para sed.

El comando sed -e 's/" host-name,"//g'busca literalmente "   h o s t n a m e , ", que no encontrará porque no está allí.

información relacionada