我有一个包含多个日志文件的“/ pcap_test”目录。每个文件都有一个模式,如:Python中的匹配模式
Pkt: 1 (358 bytes), LIFE: 1, App: itunes (INTO), State: TERMINATED, Stack: /ETH/IP/UDP/itunes, Error: None
Pkt: 2 (69 bytes), LIFE: 2, App: zynga (INTO), State: INSPECTING, Stack: /ETH/IP/UDP, Error: None
Pkt: 3 (149 bytes), LIFE: 2, App: pizzeria (INTO), State: TERMINATED, Stack: /ETH/IP/UDP/pizzeria, Error: None
在这种情况下,我想输出为第二线,因为在“应用”的内容是不存在的“堆栈”
我写了一个小Python脚本通过目录遍历,打开每个文件和打印输出 :
import os
list = os.listdir("/home/test/Downloads/pcap_test")
print list
for infile in list:
infile = os.path.join("/home/test/Downloads/pcap_test" , infile)
if os.path.isfile(infile):
str = file(infile, 'r').read()
print str
我不知怎么用grep,但无法使用相同的python脚本输出。它是这样的:
grep -vP 'App: ([^, ]*) \(INTO\).*Stack: .*\1.*$' xyz.pcap.log | grep -P 'App: ([^, ]*) \(INTO\)'
因为我已经有文件名为“STR”,我想使用,而不是单独的日志文件,以获得输出。
在这方面的任何帮助将不胜感激。
表达式: firstReMatch = re.match('App:([^,] *)\(INTO \)。* Stack:。* \ 1。* $',line) 将无法在python中工作它工作在grep。有一些空间需要在python(/ s)中使用正则表达式来处理。正如你所指出的那样,我试图用puthon得到相同的输出结果; s re.findall()但是由于困惑而无法得到任何解决方案。使用grep可能需要子进程调用,但我认为使用regix可以解决此问题。只是无法击中它的头。 – 2013-02-19 08:56:51
@学习我不明白。你不能将我的答案中的代码转换成你想要的东西?顺便说一下,我意识到我没有使用原始字符串('r“,这是一个原始字符串,前面有'r')。我已经更新了我的答案。 – acattle 2013-02-19 11:35:00
我得到了使用re.findall工作。感谢帮助。 – 2013-02-21 18:31:05