如何解析JSON输出以获取与指定MAC地址相对应的IP地址
修改后的正确Ansible任务
tasks: - name: 匹配目标MAC对应的IP地址 set_fact: matched_ip: "{{ arp.stdout_lines | join(' ') | regex_search(regexp, '\\1') | first }}" vars: target_mac: "00 0C 29 DC 5B C2" regexp: 'iso\.3\.6\.1\.2\.1\.4\.22\.1\.2\.1\.([0-9.]+) "{{ target_mac }} "' - name: 打印匹配结果 debug: msg: "MAC 00 0C 29 DC 5B C2 对应的IP为 {{ matched_ip }}"
运行后会输出目标IP:192.168.0.128
原代码的错误点
- 变量引用错误:ARP结果存储在
arp.stdout_lines列表中,不能直接对arp变量做正则匹配,需要先把列表拼接为字符串再处理 - 正则用法错误:
regex_search第一个参数直接传正则表达式即可,不需要额外加引号包裹自定义变量名 - 正则规则错误:
- 正则里的
.属于特殊字符需要转义,否则会匹配任意字符 - 目标MAC地址写为了不相关的
00 50 56 EC 7B 81,和需求里的目标MAC不符 - 转义符使用混乱,引号配对错误
- 正则里的
- 冗余操作:
set_fact已经把结果赋值给了指定变量,不需要额外加register重复注册
内容的提问来源于stack exchange,提问作者perl
相关产品推荐
相关产品推荐

