Ansible-Modul „raw“ – Verwenden von Escape-Zeichen in regulären Ausdrücken zum Ausführen des Befehls „sed“

Ansible-Modul „raw“ – Verwenden von Escape-Zeichen in regulären Ausdrücken zum Ausführen des Befehls „sed“

Ich möchte das Raw-Modul verwenden, um einen „sed“-Befehl auszuführen, der Escape-Zeichen enthält.

- name: Search for prefix in file and replace all following text with addition
  raw: "sed 's/\({{ prefix }}\)\(.*\)/\1 {{ addition }}/g' {{ file }} > {{ file }}.test"

Dieser beklagt allerdings mit:

ERROR! Syntax Error while loading YAML.
found unknown escape character

Wobei das „^“ auf das erste „\“ in der Zeichenfolge zeigt. Wie füge ich Escape-Zeichen in diesen Befehl ein, ohne dass Ansible versucht, sie zu verarbeiten?

Antwort1

Die folgende Aufgabe funktioniert

- raw: 'sed --regexp-extended ''s/({{ prefix }})(.*)/\1 {{ addition }}/g'' {{ file }} > {{ file }}.test'

mit Variablen

file: test
prefix: AAA
addition: XXX

gibt

$ cat test
alsdjflaskdjfasn AAA fasdfasdfsadf

$ cat test.test 
alsdjflaskdjfasn AAA XXX

Regex von "^" zu "$" geändert

- raw: 'sed --regexp-extended ''s/^(.*)({{ prefix }})(.*)$/\1 {{ addition }}/g'' {{ file }} > {{ file }}.test2'

gibt

$ cat test.test2
alsdjflaskdjfasn  XXX

Anmerkungen

verwandte Informationen