Я хотел бы извлечь регистрационную информацию из файла auth.log Linux и сообщить об этом, но у меня возникли проблемы с регулярным выражением, чтобы извлечь соответствующую информацию. Я думал, что группа, ограниченная пробелами (.*)
, будет соответствовать полному сегменту текста между этими пробелами. Он отлично подходит для первого слова и имени пользователя, но для IP-адреса он выплескивает всю строку текста, начиная с IP-адреса. Что мне не хватает?Почему мое регулярное выражение Python не совпадает между пробелами?
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
"(. *)" Захватывает также пространство, возможно, вы имели в виду ([^] *)? или, поскольку это должно быть ip "([0-9] {1,3} \. [0-9] {1,3} \. [0-9] {1,3} \. [0- 9] {1,3}) "? – lejlot