1. grep 常用参数
参考: GNU Grep 3.0
--color:高亮显示匹配到的字符串
-v:显示不能被pattern匹配到的
-i:忽略字符大小写
-o:仅显示匹配到的字符串
-q:静默模式,不输出任何信息
-A#:after,匹配到的后#行
-B#:before,匹配到的前#行
-C#:context,匹配到的前后各#行
-E:使用ERE,支持使用扩展的正则表达式
-c:只输出匹配行的计数。
-I:不区分大 小写(只适用于单字符)。
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及 行号。
- m: 匹配多少个关键词之后就停止搜索
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。
2. 普通:搜索trace.log 中含有ERROR字段的日志
grep ERROR trace.log
3. 输出文件:可以将日志输出文件中
grep ERROR trace.log > error.log
4. 反向:搜索不包含ERROR字段的日志
grep -v ERROR trace.log
5. 向前:搜索包含ERROR,并且显示ERROR前10行的日志
grep -B 10 ERROR trace.log
6. 向后:搜索包含ERROR字段,并且显示ERROR后10行的日志
grep -A 10 ERROR trace.log
7. 上下文:搜索包含ERROR字段,并且显示ERROR字段前后10行的日志
grep -C 10 ERROR trace.log
8. 多字段:搜索包含ERROR和DEBUG字段的日志
gerp -E 'ERROR|DEBUG' trace.log
9. 多文件:从多个.log文件中搜索含有ERROR的日志
grep ERROR *.log
10. 省略文件名:从多个.log文件中搜索ERROR字段日志,并不显示日志文件名
从多个文件中搜索的日志默认每行会带有日志文件名
grep -h ERROR *.log
11. 时间范围: 按照时间范围搜索日志
awk '$2>"17:30:00" && $2<"18:00:00"' trace.log
日志形式如下, $2代表第二列即11:44:58, awk需要指定列
11-21 16:44:58 /user/info/
12. 有没有:搜索到第一个匹配行后就停止搜索
grep -m 1 ERROR trace.log
13. 使用正则提取字符串
grep -Eo 'cause":"(.*?)"' test.log
cause":"A"
cause":"B"
cause":"A"
cause":"A"
cause":"A"
如果相对提取字符串的结果进行按照出现的次数进行排序,可以使用sort, uniq命令 grep -Eo ‘cause":"(.*?)"’ test.log | sort | uniq -c | sort -k1,1 -n
步骤分解
- sort 对结果进行排序
- uniq -c 对结果进行去重并统计出现次数
- sort -k1,1 -n 按照第一列的结果,进行数值大小排序