2013-08-29 160 views
0

我想用python中的一个小脚本在远程服务器的radius.log中找出一个MAC地址。我想搜索一个特定的mac并打印包含该mac地址的完整行。我只能确认mac是通过search()找到的。搜索一个字符串,并打印包含该字符串的完整行

我的代码部分是:

prog=re.compile(self.MAC_ADDR) 
sess.exec_command('tail -f /usr/local/var/log/radius/radius.log') 
rl, wl, xl = select.select([sess],[],[],0.0) 
if len(rl) > 0: #stdout 
    block= sess.recv(1024) 
    macfound=prog.search(block) 
    if macfound: 
     print "##############################################################################" 
     print self.MAC_ADDR,"found in tail" 
     time.sleep (1) 
+0

对不起,但是你的问题是什么?你说你可以确认你确实找到了MAC地址,所以你的程序似乎正在工作。 – Evert

+0

是的,程序没有问题,但我真正想要的是打印包含mac的完整行。每个块中都有一堆行,并且当前程序只能确认块中存在的mac。我也想看到打印的行。 –

+0

你应该显示你的正则表达式('self.MAC_ADDR')。如果您使用组,则可以捕获正则表达式组中的相应行并打印该组。 – Evert

回答

1

只有使用字符串可能会更快:

for line in all_blocks.splitlines(): 
    if MAC in line: 
     print(line) 

这给你所有的MAC地址是在线条,使用常规expresssions:

prog = re.compile('^.*' + re.escape(MAC) + '.*$', re.MULTILINE) 
lines = prog.findall(all_blocks) 
+0

第一种解决方案不会在不同情况下找到相同的“MAC”。用'正则表达式'更容易处理这个问题。在第二种方法中,你为什么要逃避它? MAC没有元字符。 – Birei

+0

对不起,我需要修改什么才能使用? – User

+0

什么都没有。我认为它按原样工作。 OP应该说是否符合他的需求。 – Birei

相关问题