如果关键字存在,则有条件地从日志文件中提取部分

如果关键字存在,则有条件地从日志文件中提取部分

我正在尝试找出一种从日志文件中提取特定部分的方法。每个部分由固定字符串“<-------------->”分割。

<-------------->
abc: def1
ghi: jkl1
xyz generated: def1
<-------------->
abc: def2
ghi: jkl2
xyz generated: def2
Dec 04, 2021 2:51:05 AM abcdefg
SEVERE: [Line 447.149] Lorem ipsum dolor sit amet at [Line 212.2]
Dec 04, 2021 2:51:05 AM abcdefg
SEVERE: [Line 1315.78] Lorem ipsum dolor sit amet at [Line 147.138]
xyz generated: def2
<-------------->
abc: def3
ghi: jkl3
xyz generated: def3
<-------------->

可以使用 sed/grep 提取包含单词 SEVERE 或 WARNING 的部分吗?

另一种方法是计算行数。只有 3 行的部分可以删除。所有其他具有更多行的部分都是我要提取的部分。

答案1

您可以将每个块视为 GNU AWK 中的一条记录:

awk -v RS='<-------------->\n' -v ORS='' '/SEVERE|WARNING/'

这会将分隔符及其尾随新行视为记录分隔符。任何匹配“SEVERE”或“WARNING”的记录都会被输出,没有分隔新行;如果您希望将匹配记录分开,可以将ORS设置保留为其默认值:

awk -v RS='<-------------->\n' '/SEVERE|WARNING/'

这将在每个匹配记录(包括最后一个)之后添加一个新行。

相关内容