Como posso corresponder e substituir esse padrão de múltiplas linhas em um script bash?

0

Eu tenho um arquivo jail.local e tem seções como esta

[apache]

enabled = true
logpath = /var/log/apache/error.log

[ssh]

enabled = false
port = ssh

Eu quero

  • corresponde à string [ssh] e
  • execute a substituição na sequência de 2 linhas abaixo, ou seja, altere o
    • enabled = false para
    • enabled = true

para que o novo texto seja lido

[ssh]

enabled = true
port = ssh

Eu olhei para usar sed , mas não consegui entender os comandos necessários para contornar o fato de sed ser bastante "por linha" orientada.
Como posso fazer essa substituição?

    
por the_velour_fog 04.05.2015 / 06:59

1 resposta

2

Com o GNU sed:

sed -e '/\[ssh\]/,+2{s/false/true/}' file

Com o POSIX sed:

sed -e '/\[ssh\]/n;n;s/false/true/' file
    
por 04.05.2015 / 07:03