我有一个日志文件,其中每个日志都遵循一个模式:
Date [FLAG] LogRequestID : Content
每个日志的内容部分可能跨越多行。给定一个 LogRequestID,我需要搜索所有事件,并获取整个日志。我需要使用 perl、awk、sed 或 pcregrep 来完成此操作。
示例输入(注意日志之间没有空行):
2017 年 5 月 24 日 17:00:06,827 [INFO] 123456 (Blah : Blah1) Service-name:: Single line content
2017 年 5 月 24 日 17:00:06,828 [INFO] 567890 (Blah : Blah1) 服务名称:: 内容(可能跨越多行)
2017 年 5 月 24 日 17:00:06,829 [INFO] 123456 (Blah : Blah2) 服务名称:多行内容。打印对象[ ID1=fac-adasd ID2=
123231 ID3=123108 Status=Unknown
Code=530007 Dest=CA
]2017 年 5 月 24 日 17:00:06,830 [INFO] 123456 (Blah : Blah1) Service-name:: Single line content
2017 年 5 月 24 日 17:00:06,831 [INFO] 567890 (Blah : Blah2) 服务名称:: 内容(可能跨越多行)
给定搜索键 123456 我想提取以下内容:
2017 年 5 月 24 日 17:00:06,827 [INFO] 123456 (Blah : Blah1) Service-name:: Single line content
2017 年 5 月 24 日 17:00:06,829 [INFO] 123456 (Blah : Blah2) 服务名称:多行内容。打印对象[ ID1=fac-adasd ID2=
123231 ID3=123108 Status=Unknown
Code=530007 Dest=CA
]2017 年 5 月 24 日 17:00:06,830 [INFO] 123456 (Blah : Blah1) Service-name:: Single line content
使用 grep 给了我单行日志,但只给了我多行日志的一部分。
我尝试在搜索模式之后检查几行,使用 awk,并检查是否到达了另一个日志,但它变得低效。我需要某种可以与 pcregrep 或 perl 甚至 awk 一起使用的正则表达式来获取此输出。
请帮帮我,因为我对正则表达式很不好。