
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
- Verwenden7.3.2. Stil mit einfachen Anführungszeichen
- Mitsed --regexp-erweitertDie Klammern müssen nicht maskiert werden.