Substituir texto por padrão de múltiplas linhas [duplicado]

0

Eu tenho um padrão em um arquivo que inclui uma nova linha:

client_encryption_options:
    enabled: false

Eu quero definir enabled para true . Mas o enabled tem que ser o abaixo client_encryption_options .

grep não me permite procurar por multilinhas. Como posso conseguir isso?

    
por user1692342 14.02.2017 / 18:53

2 respostas

2

Bem, grep , além disso, não permite que você faça modificações, de modo que o utilitário esteja fora da imagem desde o início.

Usando o GNU sed :

$ sed '/^client_encryption_options:/,+1s/enabled:.*/enabled: true/' file

Isso localizará a linha que começa com a string client_encryption_options: e aplicará uma substituição a ela e à linha a seguir. A substituição substituirá a string enabled: e tudo seguindo a mesma linha com enabled: true .

A substituição será aplicada a ambas as linhas, mas como o padrão enabled:.* não é encontrado na primeira linha, ele permanecerá inalterado. A segunda linha será alterada incondicionalmente (independentemente do texto após enabled: ).

    
por 14.02.2017 / 19:03
2

com sed :

sed '/client_encryption_options:/{n;s/false/true/;}'

n é o comando para obter a próxima linha no espaço padrão (depois de ter impresso e descartado o conteúdo atual do espaço padrão), s é para substituir .

    
por 14.02.2017 / 19:06

Tags