使用Ansible在列表项上使用正则表达式删除特殊字符

时间:2019-10-10 10:10:41

标签: regex ansible

我无法弄清楚。

如何删除下面的item.0变量内的所有特殊字符和空格?

例如show命令将像这样转换。

show running-config >> show_running_config

show ip interface brief | include up >> show_ip_interface_brief_include_up

将输出保存到与命令同名的文件中。因此,|/\等特殊字符会引起问题。

我已经尝试过使用它,但是我只是报错。

dest: "/media/share/ansible_out/{{ inventory_hostname }}/{{ item.0 | regex_replace('@?\+(.*)', '_') }}.bck"

以下是Ansible代码,当尝试使用文件名中的|写入文件时引发错误。

---
- name: Create show command list
  set_fact:
    command_list:
      - show running-config
      - show ip interface brief | include up

- name: Execute commands on device
  ios_command:
    commands: "{{ command_list }}"
  register: output
  when: ansible_network_os == 'ios'

- name: Copy show command output to file
  copy:
    content: '{{ item.1 }}'
    force: yes
    dest: "/media/share/ansible_out/{{ inventory_hostname }}/{{ item.0 }}.bck"
  loop: "{{ command_list|zip(output.stdout)|list }}"
  when: ansible_network_os == 'ios'

1 个答案:

答案 0 :(得分:1)

  

Q:“如何删除任何特殊字符和空格,只在变量中保留文本?”

A:可以使用 map regex_replace 的组合,因为YAML中的字符串是字符数组。例如剧本

- hosts: localhost
  vars:
    regex: '[^A-Za-z0-9._-]'
    replace: '_'
    command_list:
      - show running-config
      - show ip interface brief | include up
  tasks:
    - debug:
        msg: "{{ item|map('regex_replace', regex, replace)|list|join() }}"
      loop: "{{ command_list }}"

给予

"msg": "show_running-config"
"msg": "show_ip_interface_brief___include_up"