sed: reemplaza uno o más valores de grupo en líneas que coinciden

sed: reemplaza uno o más valores de grupo en líneas que coinciden

Estoy intentando cambiar una variable de configuración en un archivo. Básicamente, el archivo tiene varias líneas en este formato:

$config['var'] = 'val';

El resultado deseado:

$config['var'] = 'new_value';

Esto es lo que se me ocurrió hasta ahora:

sed -i -r "s/^\$config\['var'\]\s*=\s*(..*);$/\1'new_value'/g" config.cfg

Probé respuestas a lo que parecen innumerables preguntas similares aquí, pero no he tenido suerte. ¿Alguna pista de lo que podría estar haciendo mal?

Respuesta1

No es necesario incluir configo varen el patrón de búsqueda. Úselo /^$config\['var'\]/antes s/…/…/para realizar búsquedas y reemplazar solo dentro de las líneas que comienzan con $config['var']. Esto facilita toda la tarea.

sed "/^\$config\['var'\]/ s/=.*;/= 'new_value';/"

La nota $se escapa debido a comillas dobles. Ya no se escapa cuando llega sed. La herramienta lo trata literalmente porque no está al final.

información relacionada