我想匹配(并删除或替换一条注释行)一个行块:
daemon.*;mail.*;\
news.err;\
*.=debug;*.=info;\
*.=notice;*.=warn |/dev/xconsole
我尝试将lineinfile
与daemon(?:.|\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块(通过正则表达式匹配)。
答案 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"