我有一个关于按行匹配字符串的最佳方法的问题。我有一个包含以下几行的文件。
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
我一直无法弄清楚如何匹配此模式并删除多余的文本。任何帮助都会很棒!
答案 0 :(得分:0)
鉴于这些行存储在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"
答案 1 :(得分:0)
有趣的是,我将不得不测试您的解决方案。我设法使用捕获组在另一个论坛上找到我的答案,并在匹配/替换后再次引用它。 \ g
- 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