如何在文本文件中查找字符串并打印前后行
我正在尝试把我的shell脚本转换成Python代码,但在这个操作上遇到了困难。
我有一个进程会输出一个文本文件,文件的内容大致是这样的:
Running Operation kdasdakdnaskdaksdma
(error if present) error: kdmakmdasmdaksom
这个文件可能有多行内容,包含操作和错误信息(如果有的话,没错误的话下一行就会是另一个操作);每个块后面总是会有一个换行符。
我想扫描这个文件,找到包含“error:”的那一行,然后读取导致错误的操作和错误的详细信息,这样我就可以把它从文本文件中提取出来,保存到一个错误日志文件里。
到目前为止,我可以找到包含“error:”的行,使用这段简单的代码,但我还不知道怎么打印那些不一定包含错误信息的行,而是打印“error:”所在行之前和之后的行。
用awk或grep来做这件事很简单,但用Python我不太确定该怎么做;这是我目前的代码,它能打印出包含错误的那一行,但只打印这一行,而我希望能控制打印前后几行。
import re
fh = open('~/logs_output.txt')
for line in fh:
if "error:" in line:
print line
我试着查看Python中的RE模块和字符串模块,但到现在为止还没有找到任何能让我像用awk那样,查找特定字符串并控制打印的东西,一旦完成就停止打印。
有没有人能给我指个方向,帮我解决这个问题?谢谢!
1 个回答
1
import re
ss = '''qhvfgbhgozr
yytuuuyuyuuuyuyuuyy
jhfg tryy error jjfkhdjhfjh ttrtr
aaaeeedddeedaeaeeaeeea
jhzdgcoiua zfaozifh cohfgdyg fuo'''
regx = re.compile('^(.*)\r?\n(.*?error.*)\r?\n(.*)', re.MULTILINE)
print regx.search(ss).groups()
('yytuuuyuyuuuyuyuuyy', 'jhfg tryy error jjfkhdjhfjh ttrtr', 'aaaeeedddeedaeaeeaeeea')
结果