正则表达式处理交换机MAC地址表不规范的问题。在现实网络中,因交换机的产品不一,且同厂商的产品型号不同。命令输出的格式规范也不同。象早期的6509,CATOS命令格式。在CAM表的输出时,类似这样:
205 00-00-0c-07-ac-cd 3/3 [ALL]
47 00-50-56-8c-31-b0 3/2 [ALL]
13 78-e7-d1-df-d5-7e 5/32 [ALL]
100 00-00-0c-07-ac-64 3/3 [ALL]
29 e0-50-8b-bf-64-12 6/20 [ALL]
7 00-0f-1f-64-3b-6e 3/7 [ALL]
29 94-e1-ac-ec-c9-6e 6/20 [ALL]
而流行的MAC地址格式是0000.0c07.accd,大多交换机多是这种格式。
下面就用python正则表达式来处理这方面的问题。
#coding:utf-8
import re
patt='(\w\w-){5}\w\w\s+(\d/\d\d)' #先是搜索文档中有MAC地址的行,patt匹配模式
file6509=open(u'6509二枢楼','r')
for line in file6509:
maclist=re.search(patt,line) #先是搜索文档中有MAC地址的行
if maclist: #如果找到,则以下进行替换
maclist2=re.sub('-','',maclist.group()) #把“-”消除掉
maclist3=re.sub('(\w{4})(\w{4})',r'\1.\2.',maclist2) #每4个字符之间加一个'.' ,使之符合标准的MAC格式
print maclist3
运行后,格式为:
e050.8bbf.6415 6/20
e050.8bbf.6414 6/20
b897.5a67.6703 6/20
3c97.0e71.b257 5/46
e050.8bbf.6417 6/20
50e5.49c3.4ea7 6/20
0011.43ed.5c2a 5/20
e050.8bbf.6416 6/20
e050.8bbf.6419 6/20
0018.b198.c100 6/47
001f.9e2b.b8cc 6/42
c03f.d507.72df 6/20
e050.8bbf.6418 6/20
988b.0a85.e7a8 6/20
e050.8bbf.641b 6/20
e050.8bbf.641a 6/20
fcaa.1403.433b 6/20
e050.8bbf.641d 6/20
0022.0c76.b241 5/46
e050.8bbf.641c 6/20
e050.8bbf.641f 6/20
fcaa.1498.b492 5/46
e050.8bbf.641e 6/20
70f3.5a01.8bc0 6/20
fc15.b4fc.f494 5/46
4ccc.6ac1.d9fc 6/20
d43d.7ea8.c6d4 5/46
90fb.a618.feba 6/20
000e.a38d.b127 6/20
6c0b.84ac.eda6 5/46
902b.340b.baae 5/46
a0cf.5b05.dac1 5/46
00e0.4c36.1978 5/46
6c3b.e517.e3f5 6/20
001d.090c.23fb 5/46
001e.0bd9.0ba6 6/47
78e7.d15a.1604 6/47
0008.30ad.ddc1 6/20
78e7.d1df.dea8 6/41
90fb.a61b.0e4d 5/46
98ee.cb06.ac68 5/46
a414.375b.8fdd 6/20
c85b.7655.8e79 5/46
782b.cb07.2f13 6/16
a414.375b.8fdf 6/20
448a.5b4f.55ae 6/20
1060.4b86.b361 5/46
448a.5b52.a80b 5/46
6c3b.e517.e258 6/20
00e0.7052.913b 5/46
782b.cb07.2f1b 6/16
4437.e650.eeec 6/20
001f.9dab.b9c1 5/46
e050.8bbf.6422 6/20
e050.8bbf.6423 6/20
e050.8bbf.6420 6/20
902b.34c4.c512 6/20
e050.8bbf.6421 6/20
e050.8b41.6ee9 6/20
94e1.acec.c996 6/20
e050.8bbf.6426 6/20
e050.8bbf.6427 6/20
e050.8bbf.6424 6/20
000e.a301.3d46 6/20
90fb.a619.2d69 6/20
e050.8bbf.6425 6/20
b8ae.eddd.df20 6/20
74d4.3557.9a83 5/46
b8ae.eddd.de3c 6/2