У меня есть вопрос о том, как лучше всего подбирать строки для каждой строки. У меня есть файл со следующими строками.
set interfaces vlan unit 1040 description line-v0 1040 1077 1413 2239 2412 2413 2414 413 743-1g28
set interfaces vlan unit 1077 description line-v0 1040 1077 1413 2239 2412 2413 2414 413 743-1g28
Я пытаюсь использовать модуль замены Ansible для следующих действий:
set interfaces vlan unit 1040 description line-v1040-1g28
set interfaces vlan unit 1077 description line-v1077-1g28
Я не смог понять, как сопоставить этот шаблон и удалить лишний текст. Любая помощь была бы замечательной!
Данные строки хранятся в replace-01.txt. Это тот код, который вы ищете?
- replace:
path: replace-01.txt
regexp: "{{ item.regexp }}"
replace: "{{ item.replace }}"
with_items:
- { regexp: "unit 1040.*$", replace: "unit 1040 description line-v1040-1g28" }
- { regexp: "unit 1077.*$", replace: "unit 1077 description line-v1077-1g28" }
- debug: msg = "{{ item }}"
with_lines: "cat replace-01.txt"
> ansible-playbook replace-01.yml | grep msg
"msg": "set interfaces vlan unit 1040 description line-v1040-1g28"
"msg": "set interfaces vlan unit 1077 description line-v1077-1g28"
Интересно, мне придется протестировать ваше решение. Мне удалось найти свой ответ на другом форуме, используя группы захвата и снова ссылаясь на него после совпадения / замены. \ g <string> - это то, как вы вызываете группу захвата в Ansible, о которой я не знал.
- name: Find and replace 3000
replace:
path: "~/ansible-depo/config/{{ ansible_host }}_set_vlan_desc.set"
regexp: '(?<=(?P<vlanid_match>(\s[3][0-9][0-9][0-9])))\s?'
replace: ' description "uplink-v\g<vlanid_match>-{{ ansible_host }}"'
ignore_errors: yes
Привет, Мэтт, добро пожаловать в SO. Я не могу сказать, выделены ли жирным шрифтом цифры из-за того, что вы их выделили жирным шрифтом, или это звездочки в вашем тексте. Не могли бы вы обоснованно отформатировать свой вопрос. Для этого есть немного полезная документация