Procura e substitui algo contido em '(aspas simples)

0

Em vários arquivos em várias subpastas, tenho o seguinte texto em arquivos de texto grandes, cada um deles

Linux.Secret = 'XYZZYXZYXZYXZYXZYXZ'

Eu gostaria de fazer com que todos os Linux.Secret = '' sejam iguais a Linux.Secret = 'NEWSECRET'

Como posso fazer isso?

    
por masterq 17.07.2018 / 19:25

1 resposta

2

Primeiro, localize todos os arquivos que contenham Linux.Secret = no início de uma linha:

find . -type f -exec grep -q '^Linux.Secret =' {} ';'

Observe que grep -q não produz nada, apenas sai com um status dependendo se a expressão pode ser correspondida ou não.

Em seguida, para todos os arquivos que passam nesses testes (é um arquivo regular e contém esse texto), executamos um comando simples (GNU) sed :

find . -type f -exec grep -q '^Linux.Secret =' {} ';' \
    -exec sed -i "s/^Linux.Secret =.*/Linux.Secret = 'NewSecret'/" {} +

Isso faz a mudança no local nos arquivos, substituindo toda a linha pela linha que gostaríamos de ter. Nós lidamos com aspas simples usando aspas duplas em torno das expressões que exigem isso.

Se você precisar ser mais cuidadoso com a correspondência e corresponder apenas a Linux.Secrets = seguido por algo entre aspas simples:

find . -type f -exec grep -E -q "^Linux.Secret = '[^']+'" {} ';' \
    -exec sed -E -i "s/^Linux.Secret = '[^']+'.*/Linux.Secret = 'NEWSECRET'/" {} +

Relacionados:

por 17.07.2018 / 19:33