仅在B类网络中的Grep IP地址

172.16.0.0/12是B类网络。我只想从该类中获取IP。

这是示例日志文件。

[user@linux ~]$ cat ClassB.txt
172.16.0.0/12 is a Class B networks
172.16.0.0 – 172.31.255.255
Network:    172.16.0.0/12
HostMin:        172.16.0.1
HostMax:        172.31.255.254
Broadcast:      172.31.255.255
Out of range:   172.32.255.254
Out of range:   172.15.0.1
Out of range:   172.4.0.1
[user@linux ~]$

如果我使用egrep -n '172.[1-3][0-9]' ClassB.txt,这也会使172.32.255.254超出B级范围。

[user@linux ~]$ egrep -n '172.[1-3][0-9]' ClassB.txt
1:172.16.0.0/12 is a Class B networks
2:172.16.0.0 – 172.31.255.255
3:Network:              172.16.0.0/12
4:HostMin:              172.16.0.1
5:HostMax:              172.31.255.254
6:Broadcast:            172.31.255.255
7:Class B:              172.19.0.1
8:Class B:              172.20.0.1
9:Out of range:         172.32.255.254
10:Out of range:        172.15.0.1
[user@linux ~]$

我该怎么做才能仅grep从172.16.0.0172.31.255.255的B类IP地址

所需的输出

[user@linux ~]$ <grep/egrep command here> ClassB.txt
1:172.16.0.0/12 is a Class B networks
2:172.16.0.0 – 172.31.255.255
3:Network:              172.16.0.0/12
4:HostMin:              172.16.0.1
5:HostMax:              172.31.255.254
6:Broadcast:            172.31.255.255
7:Class B:              172.19.0.1
8:Class B:              172.20.0.1
[user@linux ~]$
mdxdr 回答:仅在B类网络中的Grep IP地址

这是我要做的

grep "172\.\(1[6-9]\|2[0-9]\|3[01]\)\.[0-9]\{1,3\}\.[0-9]\{1,3\}" ClassB.txt

但是获得答案并没有解决方案,所以让我解释一下。使用双引号或单引号是一种选择,细微差别在转义中。我倾向于使用双精度,但在此示例中,单精度形式完全相同。

grep  '172\.\(1[6-9]\|2[0-9]\|3[01]\)\.[0-9]\{1,3\}' ClassB.txt

此正则表达式假定输入经过验证,即您没有超出范围的IP地址。就像说172.31.555.1。简化了验证grep表达式的操作

grep  "172\.\(1[6-9]\|2[0-9]\|3[01]\)\.\([0-9]\.\|[1]\{,1\}[0-9]\{2\}\.\|2[0-4][0-9]\.\|25[0-5]\.\)\([0-9]\|[1]\{,1\}[0-9]\{2\}\|2[0-4][0-9]\|25[0-5]\)" ClassB.txt

编辑:我忘了我的解释

验证答案有3个子组

\(1[6-9]\|2[0-9]\|3[01]\)\.
\([0-9]\.\|[1]\{,1\}[0-9]\{2\}\.\|2[0-4][0-9]\.\|25[0-5]\.\)
\([0-9]\|[1]\{,1\}[0-9]\{2\}\|2[0-4][0-9]\|25[0-5]\)

,它们与ip地址的三个结尾部分有关,您可以将第二个替换为第三个,然后在其后加上\。从技术上讲,它是相同的,因为经常有很多正则表达式可以工作,但外观却完全不同。我通常选择第一个比较简单的方法,因为大多数输入都是经过验证的,如果不是,则需要验证正则表达式。

例如,如果您只希望所有ip地址都使用一个更简单的正则表达式

grep "\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}" ClassB.txt

再次,这将要求输入经过预先验证。

本文链接:https://www.f2er.com/3117100.html

大家都在问