Estou tentando alterar uma variável de configuração em um arquivo. Basicamente, o arquivo possui várias linhas neste formato:
$config['var'] = 'val';
A saída desejada:
$config['var'] = 'new_value';
Isto é o que eu descobri até agora:
sed -i -r "s/^\$config\['var'\]\s*=\s*(..*);$/\1'new_value'/g" config.cfg
Tentei respostas para o que parecem ser inúmeras perguntas semelhantes aqui, mas não tive sorte. Alguma pista do que posso estar fazendo de errado?
Responder1
Você não precisa incluir config
ou var
no padrão de pesquisa. Use /^$config\['var'\]/
before s/…/…/
para realizar pesquisa e substituição apenas nas linhas que começam com $config['var']
. Isso torna toda a tarefa mais fácil.
sed "/^\$config\['var'\]/ s/=.*;/= 'new_value';/"
A nota $
escapa por causa das aspas duplas. Não há mais escape quando chega a sed
. A ferramenta trata literalmente porque não está no final.