我想从 Linux auth.log 中提取登录信息并报告它,但在使用正则表达式提取相关信息时遇到问题。我认为由空格 (.*) 包围的组将匹配这些空格之间的完整文本段。对于第一个词和用户名,它工作正常,但对于 IP 地址,它会吐出从 IP 地址开始的整行文本。我错过了什么?
s='Accepted keyboard-interactive/pam for user101 from 10.19.36.76 port 36272 ssh2'
s2='Postponed keyboard-interactive for user101 from 10.19.36.76 port 36303 ssh2 [preauth]'
w = re.compile ("(.*) keyboard-interactive.*for (.*) from (.*) ");
m = w.search(s2)
if m:
print "login by:", m.group(2)
print "src ip :", m.group(3)
print "status :", m.group(1)
输出:
login by: user101
src ip : 10.19.36.76 port 36303 ssh2 [preauth]
status : Postponed
或者:
login by: user101
src ip : 10.19.36.76 port 36272 ssh2
status : Accepted
请您参考如下方法:
w = re.compile ("(.*?) keyboard-interactive.*for (.*?) from (.*?) ");
^^ ^^ ^^
让你的正则表达式不贪婪
