Ansible regrex插入或匹配的问题

时间:2018-12-17 20:31:20

标签: regex replace ansible

我有一个关于按行匹配字符串的最佳方法的问题。我有一个包含以下几行的文件。

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

我一直无法弄清楚如何匹配此模式并删除多余的文本。任何帮助都会很棒!

2 个答案:

答案 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 是您如何在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