A pesquisa de padrões de várias linhas em arquivos com grep é trivial . Invertendo esse padrão nem tanto.
Background: Eu quero criar arquivos de variáveis limpos sem senhas para que eu possa enviá-los para um repositório.
Exemplo de arquivo de variável contendo uma senha criptografada:
ansible_user: rick
ansible_become_password: !vault |
$ANSIBLE_VAULT;1.1;AES256
35623732646263636163383738353230626565383533626261313564383832643334363632383134
3833316539376436333462303564636236646662376535300a356631346166626632333365353465
30343138313363666434343938393464343861666234633434383037393230633333333364383835
3962383339373731610a316362326239386539633638646331636633333330633231383730323634
33653332353239353662366631373037653135303163663365633532643535663933
never: 'gonna,give,you,up'
Resultado pretendido:
ansible_user: rick
never: 'gonna,give,you,up'
Eu posso facilmente combinar as linhas que contêm as senhas com este comando:
grep -Pz '.+\: !vault \|(\n\s+.+){2,}' host_vars/host.yml
O problema: O parâmetro -v
, que normalmente inverte o resultado, não funciona com-P
Como posso criar uma cópia dos arquivos variáveis sem as linhas de senha?
É hackish porque não funcionaria se você tiver outras variáveis de várias linhas, mas neste caso:
Portanto, apenas pularia qualquer coisa que começasse com espaço em branco. Se você quiser uma solução mais elegante, eu usaria um programa de linha de comando para lidar com arquivos yaml e ver se você pode excluir valores. Lidar com arquivos yaml usando o cli é abordado em detalhes em outras postagens neste site: https://stackoverflow.com/questions/5014632/how-can-i-parse-a-yaml-file-from-a-linux- script de shell
Eu consegui funcionar usando
pcregrep
:Mas isso requer a instalação do pcregrep, que pelo menos no Ubuntu não é padrão. Portanto, ainda estou aberto para melhores sugestões.