Usando o comando sed para combinar texto em um determinado bloco de texto

0

Eu tenho o seguinte texto:

client_encryption_options:
    enabled: true
    # If enabled and optional is set to true encrypted and unencrypted connections are handled.
    optional: false
    keystore: conf/.keystore
    keystore_password: cassandra

Estou tentando alterar o valor no keystore em client_encryption_options usando o comando sed.

sed "/^client_encryption_options:/,+1s/keystore:.*/keystore: \/opt\/test/" $CASSANDRA_YAML_FILE > cassandra.yaml.tmp && mv cassandra.yaml.tmp $CASSANDRA_YAML_FILE

Quando eu tento o comando acima, ele não substitui o conf / .keystore por /opt/test/

    
por user1692342 15.02.2017 / 16:39

2 respostas

2

Não, isso não acontece.

Você está usando minha solução de uma pergunta anterior . Essa pergunta pergunta especificamente sobre a substituição de um valor na próxima linha. Esta questão exige que você faça a mudança de quatro linhas mais abaixo.

Alterar o +1 para +4 pode corrigir isso para você.

    
por 15.02.2017 / 16:47
0
sed -e '
   /^client_encryption_options:/,/keystore:/!b
   //!b
   s|\(keystore:\).*| /opt/test|
' < $CASSANDRA_YAML_FILE > cassandra.yaml.tmp && \
   mv cassandra.yaml.tmp "$CASSANDRA_YAML_FILE"

Você pode até mesmo usar a opção '-i' (inplace edit) se o seu 'sed' suportar isso para acabar com o 'mv':

sed -i.BAK -e 'your edit commands here' $_YOUR_YAML_FILE # Note: NO redirections here
    
por 15.02.2017 / 20:34

Tags