Alterando arquivos de configuração com awk / sed [duplicate]

0

Eu tenho dois arquivos de configuração quase idênticos em dois diretórios diferentes

## file1.conf ##
tunnel:
    enable: true
    interval: 20
    public: false

loop:
    enable: false
    interval: 20
    public: false

link:
    enable: true
    interval: 20
    public: false

## file2.conf ##
tunnel:
    enable: true
    interval: 20
    public: false

loop:
    interval: 20
    enable: false
    public: false

link:
    enable: true
    interval: 20
    public: false

Agora, quero alterar enable: false para enable: true , mas somente para a seção loop em ambos os arquivos. Como posso fazer isso usando apenas um conjunto de comandos para os dois arquivos?

    
por GMaster 11.08.2016 / 15:19

2 respostas

3

Isso pode ser feito com uma edição inplace usando sed -i .

sed -i '/^loop:/,/^$/ { s/enable:.*$/enable: true/ }' file1.conf file2.conf

O comando divide-se em duas partes principais:

/^loop:/,/^$/ { .... }

Isso significa que limitamos o material dentro de {...} à seção que começa com loop: e termina com uma linha em branco.

Por dentro, temos

s/enable:.*$/enable: true/

O que simplesmente garante que a linha enable: esteja definida como verdadeira.

O resultado é que reescrevemos file1.conf e file2.conf para que a seção que começa com loop: e termine com uma linha em branco tenha qualquer enable de linha reescrita para enable: true

    
por 11.08.2016 / 15:26
0

Não é necessário analisar o bloco completo

sed -i '/loop/{:a;n;/enable/s/false/true/;Ta;}' file1.conf file2.conf
    
por 11.08.2016 / 16:00

Tags