Com base neste exemplo:
- lineinfile: dest=/opt/jboss-as/bin/standalone.conf regexp='^(.*)Xms(\d+)m(.*)$' line='\1Xms${xms}m\3' backrefs=yes
a partir desta documentação , tentou-se fazer uma regex-replace no Ansible.
Versão Ansible
user@server:/home$ ansible --version
ansible 2.1.1.0
/caminho/para/arquivo:
helloworld
Trechos ansible:
- lineinfile:
dest: /path/to/file
regexp='^(hello)world$'
line='\1030'
tentativa 2
- lineinfile:
dest: /path/to/file
regexp='^(hello)world$'
line="\1030"
Resultado esperado:
hello030
Resultado atual:
\1030
Perguntas
- Por que o resultado é
\1030
em vez dehello030
? - Como resolver isso?
O padrão do módulo lineinfile é
backrefs: false
. Seuregexp='^(hello)world$'
corresponde a todo o conteúdo do arquivo . Literal deline='\1030'
substitui o conteúdo.backrefs: true
line:
Um backref seguido por números não funcionará como esperado. Em vez disso, você precisará de um grupo nomeado. por exemplo
\g<1>
Suponho que seja porque corresponde a \1030 inteiro (como 1030-th backref). Talvez tente \1 030 primeiro e você verá se é o motivo.