注意:我正在寻找Ansible的解决方案。这是问题描述:
我有一个文件filedet.yml,如下所示,但是该Yaml实时可能包含更多IP和文件详细信息。
---
10.9.9.111:
/tmp/test.jar:
hash: e6df90d38fa86f0e289f73d79cd2cfd2a29954eb
/tmp/best.jar:
hash: e6df90d38fa86f0e289f73d79cd2cfd2a29954eb
10.8.8.44:
/tmp/conf/extra/httpd-ssl.conf:
hash: 1746f03d57491b27158b0d3a48fca8b5fa85c0c2
/tmp/conf/httpd.conf:
hash: 1746f03d57491b27158b0d3a48fca8b5fa85c0c2
我希望提取特定的IP和文件详细信息,以便可以使用state: absent
属性将其从yaml中删除。因此,所需的正则表达式应返回以下内容:
10.9.9.111:
/tmp/test.jar:
hash: e6df90d38fa86f0e289f73d79cd2cfd2a29954e
/tmp/best.jar:
hash: e6df90d38fa86f0e289f73d79cd2cfd2a29954eb
我决定将开始模式设置为'10 .9.9.111'并进行搜索,直到没有空格或换行符为止,这意味着直到到达下一个IP。
我准备了以下正则表达式,它在http://regex101.com上显示了正确的,所需的完整文本匹配。查看快照。
下面的正则表达式查询:
[^#](^10.9.9.111:)(.|\n)*^(?!( |\n))
同一个正则表达式可以与grep -Pzo
一起正常工作,并返回所需的字符串。但是,正则表达式无法与ansible的lineinfile
模块一起使用,因为它没有产生任何结果。
我希望此正则表达式或任何其他解决方案可与Ansible配合使用,以便我可以从Yaml中删除给定的IP及其文件详细信息
Ansible:
- name: "Remove entry from file."
lineinfile:
path: "/app/filedet.yaml"
regexp: "[^#](^10.9.9.111:)(.|\n)*^(?!( |\n))"
state: absent
请问这里是什么问题?