
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 config
o var
en 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.