Примечание: я ищу решение для 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
I wi sh to извлечь конкретный IP-адрес и сведения о файле, чтобы его можно было удалить из yaml с помощью атрибута state: absent
. Таким образом, желаемое регулярное выражение должно возвращать следующее:
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, чтобы я мог удалить данный IP-адрес и сведения о файле из yaml
Ansible:
- name: "Remove entry from file."
lineinfile:
path: "/app/filedet.yaml"
regexp: "[^#](^10.9.9.111:)(.|\n)*^(?!( |\n))"
state: absent
Подскажите, пожалуйста, в чем здесь проблема?