grep -a10显示匹配行及后10行,适合查看错误后上下文;-b5显示前5行,-c3显示前后各3行;排查异常应组合使用,如grep -c8,并配合tail、awk、less等工具提升效率。

grep -A10 用于显示匹配行及其后10行,适合快速查看异常日志中错误发生后的连续上下文(比如堆栈、状态变化或后续报错),但要注意它只输出“之后”的行,不包含前面的上下文。
理解 -A、-B、-C 参数的区别
排查异常时,单靠 -A10 往往不够,因为关键线索可能出现在错误前(如配置加载、请求头、前置条件):
- -A10:匹配行 + 后面10行(After)
- -B5:匹配行 + 前面5行(Before)
- -C3:匹配行 + 前后各3行(Context),等价于 -B3 -A3
实际排查中推荐组合使用
例如定位 Java 应用的 OutOfMemoryError,只看后面10行可能错过 GC 日志或线程启动记录:
- 查错误及前后各8行:
grep -C8 "OutOfMemoryError" application.log - 若日志量大需进一步过滤,可叠加
--color=always高亮,再用less -R浏览:grep -C8 "Exception" app.log | less -R - 多个关键词同时匹配上下文(如“ERROR”且含“timeout”):
grep -C5 "ERROR.*timeout\|timeout.*ERROR" access.log
配合其他工具提升效率
单纯依赖 -A/-C 容易遗漏跨段信息,建议衔接常用手段:
- 用
tail -n 200 app.log | grep -C5 "Failed to bind"快速检查最新200行中的异常上下文 - 结合
awk提取时间戳附近完整事务(如从 “REQUEST_ID=abc123” 到下一个同 ID 或空行) - 对滚动日志,用
grep --line-buffered配合tail -f实时捕获带上下文的异常流
注意边界与性能细节
-A10 等参数在超大文件中仍会逐行扫描,但不会显著增加开销;真正影响速度的是正则复杂度和磁盘IO:
- 避免在未索引的海量归档日志(如 .gz)上直接跑
zgrep -A10,先zcat解压部分再查更可控 - 匹配行本身被重复计算:-C3 输出共7行,其中匹配行只出现1次,不是前后各3行再加1行
- 多行匹配(如用
-z处理 null 分隔内容)时,-A/-B 行计数逻辑会变化,慎用于非标准日志格式











