【发布时间】:2019-12-05 23:15:19
【问题描述】:
我有一个文件,我必须从中提取包含“TCP 0.0.0.0”的行和正在进行的文本,然后比较它旁边的两个数字,只有当它们的长度不相等时才打印行。
我有下面的代码,它只提取包含“TCP 0.0.0.0”和正在进行的文本的行,但我需要通过比较它旁边的两个数字再次过滤,如果长度不相等则打印:
import re
f = open("log.txt", "r")
counter = 0
print("="*20)
for line in f:
match = re.search("(TCP 0\.0\.0\.0) (.*) (ongoing)", line)
if match:
counter += 1
print("-"*10)
# If you want to print the whole line
print("Count {}:[F] {}".format(counter, line.rstrip()))
# if you want to print just the matched section
# print("Count {}:[M] {}".format(counter, match.groups() [1].rstrip()))
print("="*20)
print("Total Found: {}".format(counter))
f.close()
log.txt:
Dash#07-06-2019 18:04:32 WARNING 240 Anomalies "TCP handshake violation, first packet not syn" TCP 0.0.0.0 0 0.0.0.0 0 15 Regular "policy1" tetet 534049 533799 0 0 N/A low drop FFFFFFFF-FFFF-FFFF-0029-00005CFADC78
Do#07-06-2019 18:04:32 WARNING 240 Anomalies "TCP handshake violation, first packet not syn" TCP 0.0.0.0 0 0.0.0.0 80 15 Regular "policy2" ongoing 77010 76760 0 0 N/A low drop FFFFFFFF-FFFF-FFFF-002A-00005CFADC78
07-06-2019 18:04:37 WARNING 240 Anomalies "TCP handshake violation, first packet not syn" TCP 0.0.0.0 0 0.0.0.0 0 15 Regular "policy1" ongoing 53408 533837 0 0 N/A low drop FFFFFFFF-FFFF-FFFF-0029-00005CFADC78
07-06-2019 18:04:37 WARNING 240 Anomalies "TCP handshake violation, first packet not syn" TCP 0.0.0.0 0 0.0.0.0 80 15 Regular "policy2" ongoing 770124 76762 0 0 N/A low drop FFFFFFFF-FFFF-FFFF-002A-00005CFADC78
D#07-06-2019 18:04:42 WARNING 240 Anomalies "TCP handshake violation, first packet not syn" TCP 0.0.0.0 0 0.0.0.0 0 15 Regular "policy1" ongoing 535 533822 0 0 N/A low drop FFFFFFFF-FFFF-FFFF-0029-00005CFADC78
需要从文件中打印以下三行。因为它包含“TCP 0.0.0.0”和正在进行的文本,“53408,533837”的数字长度也不相同(在正在进行的文本前面):
07-06-2019 18:04:37 WARNING 240 Anomalies "TCP handshake violation, first packet not syn" TCP 0.0.0.0 0 0.0.0.0 0 15 Regular "policy1" ongoing 53408 533837 0 0 N/A low drop FFFFFFFF-FFFF-FFFF-0029-00005CFADC78
07-06-2019 18:04:37 WARNING 240 Anomalies "TCP handshake violation, first packet not syn" TCP 0.0.0.0 0 0.0.0.0 80 15 Regular "policy2" ongoing 770124 76762 0 0 N/A low drop FFFFFFFF-FFFF-FFFF-002A-00005CFADC78
D#07-06-2019 18:04:42 WARNING 240 Anomalies "TCP handshake violation, first packet not syn" TCP 0.0.0.0 0 0.0.0.0 0 15 Regular "policy1" ongoing 535 533822 0 0 N/A low drop FFFFFFFF-FFFF-FFFF-0029-00005CFADC78
【问题讨论】:
-
awk更适合这种情况。 -
我是 python 新手,请帮忙
-
您可以使用
split('ongoing')[1]获取ongoing之后的所有文本,然后您可以使用split(' ')[0:2]获取ongoing之后的两个数字 -
@AlfredE.Noobman 这既错误又无益。
-
@John 您只需要扩展正则表达式,以便它也捕获正在进行的数字:
re.search(r"TCP 0\.0\.0\.0 (.+?) ongoing (\d+) (\d+)", line)。现在match.groups()将返回一个包含您感兴趣的所有元素的元组。
标签: python python-3.x string-matching