Я не уверен, что это лучший способ решить эту проблему в python. В bash я бы, вероятно, просто использовал awk, sed и покончил бы с этим.
Есть два предложения, основанные на этом посте , но у меня возникли проблемы с реализацией. Я хотел бы очистить доменные имена.
код
import re
log = ["4/19/2020 11:59:09 PM 2604 PACKET 0000014DE1921330 UDP Rcv 192.168.1.28 f975 Q [0001 D NOERROR] A (7)pagead2(17)googlesyndication(3)com(0)",
"4/19/2020 11:59:09 PM 0574 PACKET 0000014DE18C4720 UDP R cv 192.168.2.54 9c63 Q [0001 D NOERROR] A (2)pg(3)cdn(5)viber(3)com(0)"]
rx_dict = {
'date': re.compile(r'(?P<date>(\d+)[\/](\d+)[\/](\d+))'),
'time': re.compile(r'(?P<time>\d{2}:\d{2}:\d{2}.(?:AM|PM))'),
'client': re.compile(r'(?P<client>(?:[0-9]{1,3}\.){3}[0-9]{1,3})'),
'flags': re.compile(r'(?P<flags>(?<=\].)(.\S{0,}))'),
'query': re.compile(r'(?P<query>[\S]*)$')
}
for item in log:
counter = 0
for key, r_exp in rx_dict.items():
print(f"{r_exp.search(item).group(1)}", end='')
if counter < 4:
print(',', end='')
counter = counter + 1
print()
вывод
4/19/2020,11:59:09 PM,192.168.1.28,A,(7)pagead2(17)googlesyndication(3)com(0)
4/19/2020,11:59:09 PM,192.168.2.54,A,(2)pg(3)cdn(5)viber(3)com(0)
предпочтительный вывод
4/19/2020,11:59:09 PM,192.168.1.28,A,pagead2.googlesyndication.com
4/19/2020,11:59:09 PM,192.168.2.54,A,pg.cdn.viber.com