2016-07-21 21 views
0

Ich möchte passen (und zu entfernen oder mit einer Kommentarzeile ersetzen) ein Block von Zeilen:Werden mehrzeilige Treffer in lineinfile unterstützt?

daemon.*;mail.*;\ 
     news.err;\ 
     *.=debug;*.=info;\ 
     *.=notice;*.=warn  |/dev/xconsole 

ich versuchte, sie mit daemon(?:.|\n)*xconsole in lineinfile passen aber das Spiel scheint nicht zu passieren: eine Ersatzleitung zugegeben, aber die alte Linie bleibt:

- name: remove xconsole from rsyslog.conf 
    lineinfile: 
     dest: /etc/rsyslog.conf 
     regexp: daemon(?:.|\n)*xconsole 
     state: absent 
     # also tried to add the next line to replace with a comment 
     #line: "# removed by ansible" 

solche Blöcke werden unterstützt?

Hinweis: Ich weiß über blockinfile, die großartig ist, um das Hinzufügen/Entfernen von begrenzten Blöcken zu verwalten. Ich glaube nicht, dass sie mit nicht-einfügbar-eingefügten Blöcken arbeiten (die durch eine Regex übereinstimmen).

Antwort

2

Nein, lineinfile Suchausdruck Zeile für Zeile, siehe module's source code.

Wenn Sie entfernen/Ersetzen von Text, verwenden replace Modul - es mehrzeilige Regex verwenden, z.B .:

- name: remove xconsole from rsyslog.conf 
    replace: 
     dest: /etc/rsyslog.conf 
     # ensure regex is lazy! 
     regexp: daemon[\S\s]*?xconsole 
     replace: "# removed by ansible"