高效查日志进阶指南:掌握grep命令的完整技巧
查看匹配行前后上下文
1. 查看匹配行及前面N行(-B参数)
有时候我们需要查看异常发生前的上下文,这时可以使用-B
(Before)参数:
# 查找NullPointerException,并显示前面5行和后面50行
grep -B 5 -A 50 "java.lang.NullPointerException" a.log
2. 查看匹配行前后N行(-C参数)
-C
(Context)参数可以同时显示匹配行前后N行内容:
# 显示匹配行前后各10行
grep -C 10 "java.lang.NullPointerException" a.log
组合使用技巧
1. 实时监控日志并显示上下文
# 实时监控并显示异常前后各20行
tail -f a.log | grep -C 20 "java.lang.NullPointerException"
2. 查找压缩日志中的上下文
# 查找压缩日志中的异常及前后15行
zgrep -C 15 "java.lang.NullPointerException" *.gz
高级应用场景
1. 查找特定时间段的日志
# 查找11:00到11:30之间的异常
grep -C 10 "java.lang.NullPointerException" a.log | grep "2025-07-03 11:[0-3][0-9]"
2. 多条件组合查询
# 查找包含NullPointerException但不包含"expected"的日志
grep -A 50 "java.lang.NullPointerException" a.log | grep -v "expected"
总结表
参数 | 功能 | 示例 |
---|---|---|
-B N | 显示匹配行前N行 | grep -B 5 "error" log |
-A N | 显示匹配行后N行 | grep -A 50 "exception" log |
-C N | 显示匹配行前后各N行 | grep -C 10 "warning" log |
-v | 反向匹配(排除) | grep -v "debug" log |
-i | 忽略大小写 | grep -i "nullpointer" log |
-H | 显示文件名 | grep -H "error" *.log |
掌握这些技巧后,你将能够更高效地定位日志中的问题,快速获取完整的上下文信息,而不再局限于单行日志的查看。