首页 > 解决方案 > 如何在ansible中使用regex_replace转换这种数据格式

问题描述

- hosts: localhost
  connection: local
  gather_facts: no
  vars:
   input: |-
      404135 ARP requests sent
      6762 ARP replies sent
      6762 ARP requests received
      0 ARP requests ignored
  tasks:
    - debug: var=input

    - set_fact:
        var2: "{{ '404135 ARP requests sent' | map('regex_replace','(\\d+)ARP requests sent','ARPRequestsSent: \\1') }}"

我希望使用正则表达式替换插件来操作并转换为 JSON 格式,我们可以操作数据以及如何更改字符串位置并进入所需的输出格式

{
"ARP_Requests_Sent": "404135",
"ARP_replies_sent": "6762",
"ARP_requests_received": "6762",
"ARP_requests_ignored": "0"
}

任何线索都有帮助

标签: ansibleansible-2.x

解决方案


下面的任务完成了这项工作

    - set_fact:
        var2: "{{ dict(my_keys|zip(my_vals)) }}"
      vars:
        my_lines: "{{ input.splitlines() }}"
        my_regex: '^(.*?) (.*)$'
        replace_val: '\1'
        replace_key: '\2'
        my_keys: "{{ my_lines|
                     map('regex_replace', my_regex, replace_key)|
                     list }}"
        my_vals: "{{ my_lines|
                     map('regex_replace', my_regex, replace_val)|
                     list }}"
    - debug:
        var: var2|to_nice_json

  var2|to_nice_json: |-
    {
        "ARP replies sent": "6762",
        "ARP requests ignored": "0",
        "ARP requests received": "6762",
        "ARP requests sent": "404135"
    }

推荐阅读