正則表達式處理交換機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