正则表达式匹配IP地址范围

时间:2014-06-18 15:11:25

标签: regex

我想要匹配10.0-29.x.x,10.31-39.x.x和10.41-253.x.x的IP地址。 在下面的行中,我想捕获第3行及以下。

network 10.40.5.0 0.0.0.255
network 10.255.5.0 0.0.0.255
network 10.23.3.0 0.0.0.255
netowrk 10.273.255.0 0.255.255

所以它的工作方式是,如果匹配,它将设置一个配置无效的标志。我可能有10行无效,或者只有1.无关紧要。

2 个答案:

答案 0 :(得分:1)

正则表达式不是为了数学而设计的。 但是,如果你想要3或4,你可以尝试[3-4] {1}之类的东西。 对于更大的处理,您可能必须首先将其与一般IP正则表达式匹配,然后使用任何语言进行处理。

答案 1 :(得分:-1)

您的问题的核心是与这些数字范围匹配的正则表达式:0-29,31-39,41-253

与此匹配的扩展正则表达式为:

^network 10\.([0-9]|1[0-9]|2[0-9]|3[1-9]|4[1-9]|[5-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-3])\.[0-9]+\.[0-9]+

正则表达式分为以下几个步骤: 0-9,10-19,20-29,31-39,41-49,50-99,100-199,200-249,250-253

可以使用的shell脚本是:

if { cat input_file | egrep -q '^network 10.([0-9]|1[0-9]|2[0-9]|3[1-9]|4[1-9]|[5-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-3]).[0-9]+.[0-9]+ ' } then echo action if matched else echo action if not matched fi