Я пытаюсь изменить переменную конфигурации в файле. По сути, файл содержит несколько строк в таком формате:
$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
. Инструмент обрабатывает его буквально, потому что оно не в конце.