Answers:
您可以使用如下形式:
find . -name "*.log" | xargs grep -E 'fatal|error|critical|failure|warning|'
这将找到每个带有.log
扩展名的文件并应用grep
命令。
如果更简单,则可以一个接一个地指定每个文件。
grep -E 'fatal|error|critical|failure|warning' file1.log file2.log
如果您还想在子目录文件中进行递归搜索,则可以使用以下命令
它将在子目录文件中递归搜索
egrep -r "string1|string2" pathname
这是一项非常耗时的任务。是的,如果您要同时在多个不同的日志中搜索多个字符串,则肯定需要编写脚本。但是我最近不得不这样做,这非常痛苦。尽管如此,它已经完成并准备就绪,可以从以下链接下载:
它的工作方式非常简单。
方案1: 仅在一个日志文件中监视一个字符串
./logsearch.sh localhost /var/tmp/logXray autonda /var/log/messages 60m 'can.*t.*open' '.' 1 2 single_errCheck -ndshow
方案2: 仅在一个日志文件中监视多个字符串
./logsearch.sh localhost /var/tmp/logXray autonda /var/log/messages 60m 'can.*t.*open_P_ntpd.*stat' '.' 1 2 multi_errCheck -ndshow
方案3:监视多个日志文件中的单个/多个字符串
./logsearch.sh localhost /var/tmp/logXray autonda /var/log 60m 'can.*t.*open_P_ntpd.*stat' '.' 1 2 multi_err_multi_logCheck -ndshow
笔记:
_P_表示“或”-替换管道“ |” 符号,因为您不太可能需要搜索包含“ _P_”的字符串。如果您不想键入“ _P_”,则可以将“ _P_”替换为“ |”。
使用此脚本时,您将经常更改的参数是:
使用“ -ndfoundmul”时,您将获得类似于以下内容的输出:
[root@dgphxtest001]# ./logsearch.sh localhost /var/tmp/logXray autonda /var/log/messages 60m 'can.*t.*open_P_ntpd.*stat' '.' 1 2 blahblahA -ndfoundmul
OK: [/var/log/messages][1] /var/log/messages:P=(can_t_open=0 ntpd_stat=0)_F=(117s)_R=(228,228=0)
原始海报问题的解决方案:扫描多个日志文件中的多个字符串
./logsearch.sh localhost /var/tmp/logXray autonda /var/log 60m 'fatal_P_error_P_critical_P_failure_P_warning' '.' 1 2 multierr_logCheck -ndshow
操作系统:已在Ubuntu和Red Hat上进行了测试
grep -EFn "fatal|error|critical|failure|warning|search-string" /path/to/the/file/log_file?.lo* --color=auto
这将在名称以“ log_file?”开头的文件中搜索“致命或错误,严重,失败或警告或搜索字符串”。在路径/ path / to / the / file /中使用扩展名'lo '*,并为搜索字符串提供一个随机的颜色和在其上找到的打印行号。
grep
技能,以便您在USE职业生涯中取得好运!
-E
并且-F
不能同时使用,它们是有冲突的(典型吗?)。
JigarGandhi的答案演示了星号通配符的用法。它们更多,您可以在此处或通过运行看到它们man 7 glob
。
我发现有用的其中之一是与匹配的范围[]
。由于我使用的系统会生成按顺序编号的日志文件,例如product.log.1
product.log.2
...
product.log.200
,使用grep只需一个命令即可处理3或4个顺序文件,但不会更多。所以这
grep 'whatever' product.log.[5-7]
将对所有以product.log结尾的文件进行grep。5、6或7。通配符不必在末尾,因此flickerfly的答案可以简化为
grep -E 'fatal|error|critical|failure|warning' file[1,2].log
还要注意,这些通配符也可以在其他命令中使用cp
,例如。
如果文件都是相同的文件夹,则也可以使用花括号。
看一个例子
grep -E 'fatal|error|critical|failure|warning|' /var/log/{messages,secure,syslog,dmesg}
如果将s添加到grep,则将阻止有关丢失文件的错误
grep -sE 'fatal|error|critical|failure|warning|' /var/log/{messages,secure,syslog,dmesg}
我只是在自己做实验,以使命令可以跨多个发行版工作,由于操作系统的不同,该发行版位于一个文件中而另一个文件中。
邮件日志
sudo grep -is bob@example.com /var/log/{maillog,exim_mainlog,exim_rejectlog,mail.log,mail.err,syslog}
使用2> / dev / null来阻止zgrep丢失的.gz警告的归档邮件日志
sudo zgrep -is bob@example.com /var/log/{maillog*,exim_mainlog*,exim_rejectlog*,mail.log*,mail.err*,syslog*} 2>/dev/null
grep
可以接受多个文件参数。