现在,我正在使用以下命令搜索3.297 GZIP存档日志文件:
zegrep -B 60 -E 'DMAStatus.*nError\ {13}.{3,5}\ $' collector_2018-*
我想实现的目标:
更换选件
-B 60
具有特定的搜索模式。
这意味着,现在我在每个搜索结果之前提取60行。但是,60行可能太少,但也太多。 (取决于在日志之前写入日志的内容,或者确切地说是多少行
'DMAStatus.*nError\ {13}.{3,5}\ $'
被记录)
顺便说一句,结束模式:'\ {13}.{3,5}\ $'
只是我要在文件末尾查找的特定字符串。
\ {13}
=查找13个空格字符
.{3,5}
=查找3-5个字符长度内的任何字符串
\ $'
=后跟一个以EOL $结尾的单个空格字符。
我知道每个错误消息都由一个特定的字符集调用:01TNL
如何运行zegrep
命令来搜索上面给出的搜索模式,然后打印从01TNL
开始的任何行到搜索模式?
我在这里添加了四个不同的日志文件的示例,它们在Notepad ++中一起复制到一个文件中。
不幸的是,我忘记添加一些关键信息。恐怕,这也是为什么使用awk
的方法效果不佳的原因。
字符串01TNL
在每个日志文件中出现几次。如果字符串始终为01TNL000
,则没有错误,日志文件将继续增长。
除000
之外的三倍以外的任何其他组合均被视为错误。
末尾没有错误的日志文件应被忽略,在任何其他情况下,所有日志文件信息均来自例如第01TNL020
行到结束DMAStatus->nError
行之间的所有内容都应打印。
############ Logfile 2018-10-16_10-23-25 started pid 88108
10:23:53.987 FIO: rcvd ".01TNL000"
10:24:12.803 FIO: rcvd ".01TNL000"
10:24:30.934 FIO: rcvd ".01TNL000"
10:24:49.040 FIO: rcvd ".01TNL0**2**0"
10:24:49.702 DMSG: DMAStatus->nError 2329
############ Logfile 2018-10-17_20-35-08 started pid 187491
20:36:47.838 FIO: rcvd ".01TNL000"
20:36:53.487 FIO: rcvd ".01TNL000"
20:36:58.418 FIO: rcvd ".01TNL000"
20:37:02.329 FIO: rcvd ".01TNL000"
21:24:51.060 FIO: rcvd ".01TNL000"
21:24:54.864 FIO: rcvd ".01TNL000"
21:24:58.773 FIO: rcvd ".01TNL000"
21:25:03.175 FIO: rcvd ".01TNL000"
21:25:03.340 DMSG: DMAStatus->nError 0
############ Logfile 2018-10-15_18-45-08 started pid 42128
18:46:49.656 FIO: rcvd ".01TNL000"
18:46:55.980 FIO: rcvd ".01TNL000"
18:47:01.407 FIO: rcvd ".01TNL000"
18:47:05.266 FIO: rcvd ".01TNL000"
18:47:09.130 FIO: rcvd ".01TNL000"
18:52:57.211 FIO: rcvd ".01TNL000"
18:53:01.146 FIO: rcvd ".01TNL000"
18:53:05.006 FIO: rcvd ".01TNL000"
18:53:09.611 FIO: rcvd ".01TNL000"
18:53:16.078 DMSG: DMAStatus->nError 0
############ Logfile 2018-10-18_03-32-00 started pid 12504
03:33:52.948 FIO: rcvd ".01TNL000"
03:33:55.429 FIO: rcvd ".01TNL00**1**"
03:34:01.823 DMSG: DMAStatus->nError 2288
非常感谢。
答案 0 :(得分:0)
Grep是错误的工具。 Awk会更合适。像这样:
zcat foo.gz | awk '/^01TNL/, /DMAStatus.*nError {13}.{3,5} $/ { print }'
编辑:more reading针对awk中的匹配范围。