lineinfile中是否支持多行匹配?

时间:2016-07-21 15:02:11

标签: regex ansible ansible-playbook

我想匹配(并删除或替换一条注释行)一个行块:

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

我尝试将lineinfiledaemon(?:.|\n)*xconsole匹配,但匹配似乎没有发生:添加了替换行,但旧行仍然存在:

  - 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"

是否支持此类阻止?

注意:我了解blockinfile,这对于管理分隔块的添加/删除非常有用。我不相信它们适用于非ansible-inserted块(通过正则表达式匹配)。

1 个答案:

答案 0 :(得分:2)

不,lineinfile逐行搜索表达式,请参阅module's source code

如果您需要删除/替换文本,请使用replace模块 - 它使用多行正则表达式,例如:

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