sed条件合并NEXT行

时间:2016-10-26 14:41:05

标签: python regex parsing awk sed

我有一个如下所示的日志

10-26-2016 10:00:00 INFO bla bla bla
10-26-2016 10:00:00 ERROR This is the error
error line 2
error line 3
error line 4
10-26-2016 10:00:00 INFO bla bla bla2

我需要一个sed或python命令来获取

下面的错误行
==========================
his is the error
error line 2
error line 3
error line 4
==========================

这是一个巨大的文件,我无法打开该文件。请帮助。感谢

2 个答案:

答案 0 :(得分:1)

不确定我是否理解您需要的内容,但下面是一些代码:

with open('long_file.log', 'r') as log_file:
    log = log_file.read().split('\n')
    for line in log:
        if 'error' in line:
            print (line)

输出:

10-26-2016 10:00:00 ERROR This is the error
error line 2
error line 3
error line 4

答案 1 :(得分:1)

使用GNU sed:

sed 's/^[0-9]/\n&/' file | sed -n '/ ERROR/,/^$/{s/^[0-9].* ERROR \(.*\)/\1/;/^$/d;p}'

输出:

This is the error
error line 2
error line 3
error line 4

工作原理:

第一个sed命令(sed 's/^[0-9]/\n&/' file)在以数字开头的每一行之前插入一个空行。

输出:


10-26-2016 10:00:00 INFO bla bla bla

10-26-2016 10:00:00 ERROR This is the error
error line 2
error line 3
error line 4

10-26-2016 10:00:00 INFO bla bla bla2

第二个sed commnad仅打印以包含ERROR的行开头并以空行结束的块。大括号中的部分会删除此块中的10-26-2016 10:00:00 ERROR,并删除此块中的尾随空白行(/^$/d)。

如果要在不同错误块之间输出空行,请删除;/^$/d