sed: substitua um ou mais valores de grupo em linhas que correspondam

sed: substitua um ou mais valores de grupo em linhas que correspondam

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 configou varno 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.

informação relacionada