lineinfile 是否支持多行匹配?
Are multiline matches supported in lineinfile?
我想匹配(并删除或替换为一个注释行)一行:
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
非常适合管理分隔块的 addition/removal。我不相信他们使用非 ansible 插入的块(通过正则表达式匹配)。
否,lineinfile
逐行搜索表达式,参见module's source code。
如果您需要 remove/replace 文本,请使用 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"
我想匹配(并删除或替换为一个注释行)一行:
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
非常适合管理分隔块的 addition/removal。我不相信他们使用非 ansible 插入的块(通过正则表达式匹配)。
否,lineinfile
逐行搜索表达式,参见module's source code。
如果您需要 remove/replace 文本,请使用 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"