在Linux系统上的File中查找内容

时间:2015-01-14 02:28:37

标签: linux grep

我试图在linux系统上搜索关键字的日志文件。

如果日志文件的结构出现在下面(它没有,但这是一个很好的例子),让我们假设我想找到“你好”这个词 和hello之上的日期和时间戳以及启动下一条记录的换行符上的所有其他行。

如何实现这一目标。

我唯一能想到的是一个grep Hello -B 1 logfile.log。 这当然会让我在匹配内容之前获得一行,但是直到新行之后的行。还试过grep Hello -B 1 -A 1 logfile.log

不确定如何获得不同的线条。请指教。提前谢谢。

[日志文件的结构]

2015-01-01
Hello|
Bob |
Billy|
Tommy|

2015-01-01
Hello|
Bob |
Billy|
Tommy|
Judy|
Richard|
Paul|

2015-01-01
Tchau|
Bob |
Billy|
Tommy|
Judy|
Jerry|
Dwight|
Phil|

[期望的输出]

2015-01-01
Hello|
Bob |
Billy|
Tommy|


2015-01-01
Hello|
Bob |
Billy|
Tommy|
Judy|
Richard|
Paul|

2 个答案:

答案 0 :(得分:2)

最简单的方法是使用gnu awk并将RS设置为空,将数据划分为块组。

awk -vRS= '/Hello/' ORS="\n\n" file
2015-01-01
Hello|
Bob |
Billy|
Tommy|

2015-01-01
Hello|
Bob |
Billy|
Tommy|
Judy|
Richard|
Paul|

如果组之间的空间不重要:

awk -vRS= '/Hello/' file
2015-01-01
Hello|
Bob |
Billy|
Tommy|
2015-01-01
Hello|
Bob |
Billy|
Tommy|
Judy|
Richard|
Paul|

答案 1 :(得分:1)

您需要在grep中使用-o-P-z个参数。

$ grep -ozP '(?s)(?:\n\n|^)\K(?:(?!\n\n).)*Hello(?:(?!\n\n).)*' file
2015-01-01
Hello|
Bob |
Billy|
Tommy|
2015-01-01
Hello|
Bob |
Billy|
Tommy|
Judy|
Richard|
Paul|