sed: заменить одно или несколько значений группы в строках, которые соответствуют

sed: заменить одно или несколько значений группы в строках, которые соответствуют

Я пытаюсь изменить переменную конфигурации в файле. По сути, файл содержит несколько строк в таком формате:

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

Желаемый результат:

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

Вот что у меня получилось на данный момент:

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

Я пробовал ответы на бесчисленное количество похожих вопросов здесь, но не добился успеха. Есть какие-нибудь подсказки, что я делаю неправильно?

решение1

Вам не нужно включать configили varв шаблон поиска. Используйте /^$config\['var'\]/перед s/…/…/для выполнения поиска и замены только в строках, начинающихся с $config['var']. Это упрощает всю задачу.

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

Примечание $экранировано из-за двойных кавычек. Оно больше не экранируется, когда доходит до sed. Инструмент обрабатывает его буквально, потому что оно не в конце.

Связанный контент