我正在尝试找出一种从日志文件中提取特定部分的方法。每个部分由固定字符串“<-------------->”分割。
<-------------->
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/'
这将在每个匹配记录(包括最后一个)之后添加一个新行。