Получить IP-адрес из последней строки файла журнала, используя Regex

1

Я пытаюсь использовать 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
Теги:
python-3.5

1 ответ

1

Проблема заключается в вашем регулярном выражении. ^ соответствует началу строки, $ 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'

Ещё вопросы

Сообщество Overcoder
Наверх
Меню