Я пытаюсь использовать Python Regex, чтобы получить IP-адрес из последней строки журнала.
Я могу получить IP-адрес, если я просматриваю весь журнал. Например:
with open("read.log", "r+") as log:
for line in log:
address = "^\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}$"
match = re.match(address, line)
Но когда я пытаюсь просто прочитать последнюю строку и получить IP-адрес, я не получаю никаких результатов. Как это исправить?
import re
def run():
try:
logfile = open('read.log', 'r')
# print ('First line in log: ',logfile.readline())
for line in logfile:
x = line
for ip in x:
address = "^\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}$"
match = re.match(address, ip)
logfile.close
print ('Last Line: ', match)
except OSError as e:
print (e)
run()
Мой read.log выглядит так...
10.1.177.198 Tue Jun 19 09:25:16 CDT 2018
10.1.160.198 Tue Jun 19 09:25:38 CDT 2018
10.1.177.198 Tue Jun 19 09:25:36 CDT 2018
10.1.177.198 Tue Jun 19 09:26:38 CDT 2018
10.1.177.198 Tue Jun 19 09:27:16 CDT 2018
10.1.177.198 Tue Jun 19 09:28:38 CDT 2018
Проблема заключается в вашем регулярном выражении. ^
соответствует началу строки, $
end. Если в ваших логах/только/был IP-адрес, ваш код будет работать.
>>> import re
>>> m = re.compile("^\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}$")
>>> m.search('123.123.123.123')
<_sre.SRE_Match object; span=(0, 15), match='123.123.123.123'>
Однако это не так. Следующее изменение исправит вашу проблему поиска:
>>> import re
>>> m = re.compile("(^\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})\s")
>>> m.search('10.1.177.198 Tue Jun 19 09:28:38 CDT 2018').groups()[0]
>>> '10.1.177.198'