Python 使用通配符选项搜索日志
Python search logs using wildcard options
我有一个非常大的 netflow 数据集,看起来像这样:
192.168.1.3 www.123.com
192.168.1.6 api.123.com
192.168.1.3 blah.123.com
192.168.1.3 www.google.com
192.168.1.6 www.xyz.com
192.168.1.6 test.xyz.com
192.168.1.3 3.xyz.co.uk
192.168.1.3 www.blahxyzblah.com
....
我还有一个小得多的通配域数据集,如下所示:
*.xyz.com
api.123.com
...
我希望能够使用 python 搜索我的数据集并找到所有匹配项。所以在上面的例子中,我会匹配:
192.168.1.6 www.xyz.com
192.168.1.6 test.xyz.com
192.168.1.6 api.123.com
我尝试使用 re
模块,但无法匹配任何内容。
for f in offendingsites:
for l in logs:
if re.search(f,l):
print(l)
您的违规网站不是正则表达式,它们是 shell 通配符。但是,您可以使用 fnmatch.translate
将它们转换为正则表达式:
for f in offendingsites:
r = fnmatch.translate(f)
for l in logs:
if re.search(r, l):
print(l)
您也可以使用 fnmatch.fnmatch()
进行通配符模式搜索。
演示:
from fnmatch import fnmatch
with open("wildcards.txt") as offendingsites, open("dataset.txt") as logs:
for f in offendingsites:
for l in logs:
f, l = f.strip(), l.strip() # Remove whitespace
if fnmatch(l, f):
print(l)
输出:
192.168.1.6 www.xyz.com
192.168.1.6 test.xyz.com
我有一个非常大的 netflow 数据集,看起来像这样:
192.168.1.3 www.123.com
192.168.1.6 api.123.com
192.168.1.3 blah.123.com
192.168.1.3 www.google.com
192.168.1.6 www.xyz.com
192.168.1.6 test.xyz.com
192.168.1.3 3.xyz.co.uk
192.168.1.3 www.blahxyzblah.com
....
我还有一个小得多的通配域数据集,如下所示:
*.xyz.com
api.123.com
...
我希望能够使用 python 搜索我的数据集并找到所有匹配项。所以在上面的例子中,我会匹配:
192.168.1.6 www.xyz.com
192.168.1.6 test.xyz.com
192.168.1.6 api.123.com
我尝试使用 re
模块,但无法匹配任何内容。
for f in offendingsites:
for l in logs:
if re.search(f,l):
print(l)
您的违规网站不是正则表达式,它们是 shell 通配符。但是,您可以使用 fnmatch.translate
将它们转换为正则表达式:
for f in offendingsites:
r = fnmatch.translate(f)
for l in logs:
if re.search(r, l):
print(l)
您也可以使用 fnmatch.fnmatch()
进行通配符模式搜索。
演示:
from fnmatch import fnmatch
with open("wildcards.txt") as offendingsites, open("dataset.txt") as logs:
for f in offendingsites:
for l in logs:
f, l = f.strip(), l.strip() # Remove whitespace
if fnmatch(l, f):
print(l)
输出:
192.168.1.6 www.xyz.com
192.168.1.6 test.xyz.com