
Quero usar o módulo bruto para executar um comando 'sed' que conterá caracteres de escape.
- name: Search for prefix in file and replace all following text with addition
raw: "sed 's/\({{ prefix }}\)\(.*\)/\1 {{ addition }}/g' {{ file }} > {{ file }}.test"
Este, no entanto, reclama com:
ERROR! Syntax Error while loading YAML.
found unknown escape character
Com o '^' apontando para o primeiro '\' da string. Como incluir caracteres de escape neste comando sem tentar processá-los?
Responder1
A tarefa abaixo funciona
- raw: 'sed --regexp-extended ''s/({{ prefix }})(.*)/\1 {{ addition }}/g'' {{ file }} > {{ file }}.test'
com variáveis
file: test
prefix: AAA
addition: XXX
dá
$ cat test
alsdjflaskdjfasn AAA fasdfasdfsadf
$ cat test.test
alsdjflaskdjfasn AAA XXX
Regex modificado de "^" até "$"
- raw: 'sed --regexp-extended ''s/^(.*)({{ prefix }})(.*)$/\1 {{ addition }}/g'' {{ file }} > {{ file }}.test2'
dá
$ cat test.test2
alsdjflaskdjfasn XXX
Notas
- Usar7.3.2. Estilo com citação única
- Comsed --regexp-estendidoos parênteses não precisam ser escapados.