为了账号安全,请及时绑定邮箱和手机立即绑定

如何提取MAC ID?

如何提取MAC ID?

慕哥6287543 2021-12-21 16:17:04
我需要从一组相关命令中提取 MAC id。从第一个命令开始,括号内的值 (2,4)eth-1(2-04)应用于第二个命令以从第二个命令的输出中提取 MAC id。如何在第二个命令的输出中提取与 2 4 位于同一行的 MAC id?s1 = '''100 int-maint      debug(2-02) eth-10(2-00) maint(4-03)101 bear-test      eth-1(2-04) eth-2(2-07)102 int-test      eth-4(2-06) eth-7(2-05) eth-8(2-03) eth-9(2-01) gig-3(2-08) eth-3(4-02) eth-5(4-00) eth-6(4-01) gig-1(4-08) gig-2(4-10) poe-1(4-04) poe-2(4-05) poe-3(4-06) poe-4(4-07)'''# output of second commandr2 = '''     2     4   101  00:80:a3:bf:72:d4      5     2    10   101  00:e0:4b:52:56:56      7     2    10   100  02:00:00:64:00:00      7     2    10   102  02:00:00:66:00:00      6     2     0   100  94:10:3e:b9:4f:5c      2Switch  Port   FID      MAC-Address    Aging     4     3   100  56:1a:5e:a2:4a:73      7'''import res1o = (next((x for x in s1.split() if 'eth-1(2-04)' in x), None))print(s1o)print(r2.split())到目前为止,我有输出(如下所示)。我不确定 split() 是否是分解它以提取此值的最佳方法 00:80:a3:bf:72:d4eth-1(2-04)['2', '4', '101', '00:80:a3:bf:72:d4', '5', '2', '10', '101', '00:e0:4b:52:56:56', '7', '2', '10', '100', '02:00:00:64:00:00', '7', '2', '10', '102', '02:00:00:66:00:00', '6', '2', '0', '100', '94:10:3e:b9:4f:5c', '2', 'Switch', 'Port', 'FID', 'MAC-Address', 'Aging', '4', '3', '100', '56:1a:5e:a2:4a:73', '7']预期结果:00:80:a3:bf:72:d4
查看完整描述

2 回答

?
撒科打诨

TA贡献1934条经验 获得超2个赞

我也是python初学者,我觉得这段代码对你有帮助


101 bear-test      eth-1(2-04) eth-2(2-07)

102 int-test      eth-4(2-06) eth-7(2-05) eth-8(2-03) eth-9(2-01) gig-3(2-08) eth-3(4-02) eth-5(4-00) eth-6(4-01) gig-1(4-08) gig-2(4-10) poe-1(4-04) poe-2(4-05) poe-3(4-06) poe-4(4-07)

'''

# output of second command


r2 = '''

     2     4   101  00:80:a3:bf:72:d4      5

     2    10   101  00:e0:4b:52:56:56      7

     2    10   100  02:00:00:64:00:00      7

     2    10   102  02:00:00:66:00:00      6

     2     0   100  94:10:3e:b9:4f:5c      2

Switch  Port   FID      MAC-Address    Aging

     4     3   100  56:1a:5e:a2:4a:73      7

'''



import re

s1o = (next((x for x in s1.split() if 'eth-1(2-04)' in x), None))

print(s1o)

base_list=(r2.split())

base_str=",".join(base_list)

pattren=r"(\w{2}):(\w{2}):(\w{2}):(\w{2}):(\w{2}):(\w{2})"

all_mac=re.findall(pattren,base_str)

print(all_mac)

print('###########################################')

for i in all_mac:

    result=re.sub(",",":",str(i))

    print(result)


查看完整回答
反对 回复 2021-12-21
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

对于第一个命令,您可以应用此模式 eth-1\((\d)-0(\d)

eth-1\(=eth-1(字面上匹配

(\d) - 匹配数字并将其存储在第一个捕获组中

-0--0从字面上匹配,

(\d) - 匹配数字并将其存储在第二个捕获组中

演示

现在,您可以创建另一个正则表达式以应用于第二个命令: 2\s+4\s+\d+\s+([^\s]+)

2- 从字面上匹配 2,这来自第一个正则表达式的第一个捕获组

\s+ - 匹配一个或多个空格

4- 从字面上匹配 4,这来自第一个正则表达式的第二个捕获组

\s+ - 匹配一个或多个空格

\d+ - 匹配一位或多位数字

\s+ - 匹配一个或多个空格

([^\s]+)- 匹配一个或多个除空格之外的字符并将其存储在捕获组中,这将捕获您的 mac 地址

演示


查看完整回答
反对 回复 2021-12-21
  • 2 回答
  • 0 关注
  • 211 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号