Идея: сопоставить любую строку, например '', за исключением случаев, когда следующая строка 'Hi there'. Замените на ту же строку, за которой следует «Привет!». Это регулярное выражение, известное как отрицательный взгляд
Мой test.txt
файл при запуске
<Directory "/web/htdocs">
<Directory />
<Directory "/web/cgi-bin">
<Directory />
<Directory "/some/other">
Hi there
</Directory>
Мой test.yml
playbook
---
- name: Replace several lines
hosts: localhost
tasks:
- name: Add 'Hi there' after directory def if not present
replace:
path: test.txt
regexp: '^(<Directory ".*">\n)(?!Hi there)'
replace: '\1Hi there\n'
Первый запуск:
$ ansible-playbook test.yml
PLAY [Replace several lines] ********************************************************************************************************************************************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************************************************************************************************************************************************************
ok: [localhost]
TASK [Add 'Hi there' after directory def if not present] ****************************************************************************************************************************************************************************************************************
changed: [localhost]
PLAY RECAP **************************************************************************************************************************************************************************************************************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test.txt
файл после первого запуска. Обратите внимание, что строки добавляются только там, где это необходимо.
<Directory "/web/htdocs">
Hi there
<Directory />
<Directory "/web/cgi-bin">
Hi there
<Directory />
<Directory "/some/other">
Hi there
</Directory>
Второй запуск:
$ ansible-playbook test.yml
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
PLAY [Replace several lines] ********************************************************************************************************************************************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************************************************************************************************************************************************************
ok: [localhost]
TASK [Add 'Hi there' after directory def if not present] ****************************************************************************************************************************************************************************************************************
ok: [localhost]
PLAY RECAP **************************************************************************************************************************************************************************************************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Как видите, на этот раз файл не изменился, поскольку были добавлены все возможные строки.