我想要匹配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.无关紧要。
答案 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