我需要打开一个日志文件,并打印出两种不同模式之间的特定行。
Beginning = pattern1
Ending = pattern2
这是我到目前为止所拥有的:
def SeeIfDateTimeIsFound():
mylist = []
for line in input_data:
if CTFBeginA in line: # Or whatever test is needed
if re.search(stringA, line) and re.search(stringB, line):
mylist.append((line.strip()))
break
for line in input_data: # This keeps reading the file
if CTFEndinA in line.strip():
nextline = (next(input_data, '').strip())
if CTFEndin not in nextline:
break
else:
if re.search(stringA, line) and re.search(stringB, line):
mylist.append((line.strip()))
if re.search(stringA, line) and re.search(stringB, line):
mylist.append((line.strip()))
return mylist
我想要做的基本上就是这个awk代码的等效内容:
awk '/Beginning/,/Ending/' logfile
我在上面的python代码中遇到的问题之一是,它仅捕获找到的包含Ending模式的第一行。如果有包含Ending的多行,我希望python代码抓取其中的每一个,并且仅在抓到最后一行时才停止抓取它们。
答案 0 :(得分:0)
您可以在以下代码行中进行操作:
print_swt = 0
with open(logfile,'r') as f:
for line in f:
if Beginning in line:
print_swt =1
if Ending in line:
print_swt = 0
if print_swt:
print line
注意:这可能不是最pythonic
要做的事情。