Substituir valores em determinada seção em um arquivo

3

Eu tenho um arquivo que tem várias seções, eu tenho que mudar os valores de todos os parâmetros na seção [Test2] .

Entrada:

[Test_1]
abc=123
def=456
.
.
.
so on

[Test_2]
abc=123
def=456
.
.
.
so on

[Test_3]
abc=123
def=456
.
.
.
so on

Resultado esperado:

[Test_1]
abc=123
def=456
.
.
.
so on

[Test_2]
abc=111
def=222
.
.
.
so on

[Test_3]
abc=123
def=456
.
.
.
so on

Eu tentei isso:

sed "/\[Test_2\]/{n;s/^\(abc=\).*/$val1/';}" input > output.new && mv output.new input
sed "/\[Test_2\]/{n;s/^\(def=\).*/$val2/';}" input > output.new && mv output.new input

Em que $val1=111 e $val2=222 .

Mas não estou recebendo resultados esperados. Alguém pode ajudar nisso?

    
por serenesat 25.11.2016 / 17:38

2 respostas

3

Outra abordagem seria usar o Ansible. Seu arquivo é um formato de arquivo ini_file e o Ansible gerencia esse tipo de arquivo muito bem.

Verifique o link

A sintaxe é muito simples, no seu exemplo:

- ini_file: dest=/anotherconf
            section=Test_2
            option=abc
            value=111
    
por 25.11.2016 / 18:38
0

Isso funcionou para mim -

sed  '/Test_2/ {n;s/^\(abc=\).*$/'"$val1"'/;x;n;s/^\(def=\).*$/'"$val2"'/;H;g}'
    
por 25.11.2016 / 18:37