Ansible:从IP地址中提取前三个八位字节

时间:2016-11-29 01:06:39

标签: regex ansible jinja2

我有一个带有IP地址的字符串:192.168.10.2

我想在Ansible中提取IP的前三个八位字节,我试图使用这个正则表达式。

{{comp_ip | regex_replace("^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}"), "//1"}}

这不会产生任何结果。有人能纠正我哪里出错了吗?

3 个答案:

答案 0 :(得分:7)

如果已经有点分隔的IP地址,有一种简单的方法:

{{ comp_ip.split('.')[0:3] | join('.') }}

答案 1 :(得分:2)

你做得对,你只需要在Regex中使用括号来组成一个组。最好匹配整个ip并使用$结束正则表达式,并在代码中将//1更改为\\1

从以下地址更改正则表达式:

^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}

到这个正则表达式:

^([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\.[0-9]{1,3}$

这是完整的代码:

{{comp_ip | regex_replace('^([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\.[0-9]{1,3}$', '\\1')}}

答案 2 :(得分:1)

如果您想要计算网络地址,可以使用Ansible ipaddr过滤器,它提供了以下功能: http://docs.ansible.com/ansible/latest/playbooks_filters_ipaddr.html

links