使用 grep 查找关键字并显示上下文行
2025年6月24日 10:30
背景
排查日志时,常需要定位关键字并带上一两行上下文确认语义。grep 内建的上下文选项可以直接满足需求,不必再手动 sed -n '19,21p'。
快速示例
假设想在 app.log 中找出包含 Fatal error 的行,并且同时看到上一行与下一行:
1
 |  | 
-n会显示行号,便于定位。-C 1等价于--context=1,表示向前向后各多带 1 行。想多看几行时调整数字即可。
输出中,命中的行以冒号分隔行号与内容,上下文行则以短横线 - 连接,快速区分重点。
控制上下文范围
grep 提供三个粒度化参数:
-C <N>:两侧各 N 行,是最常用的形式。-B <N>:只带前 N 行(Before)。-A <N>:只带后 N 行(After)。
例如只关心关键字后面的调用栈,可使用:
1
 |  | 
再配合 -m 1(匹配一次后退出)可以缩短复杂日志的搜索时间。
与常见参数组合
-i:忽略大小写,处理大小写不一致的告警信息很方便。-E:启用扩展正则,可直接写grep -E "(WARN|ERROR)"。--color=auto:高亮命中关键字,在终端阅读更直观。
将这些参数组合成 Shell 函数,后续排查直接调用。例如在 ~/.bashrc 中定义:
1 2 3 4  |  | 
执行 gctx "timeout" service.log 2,即可得到行号、关键字高亮、上下文行的结果。
小结
-C/-A/-B是获取上下文的核心选项,记住数字表示行数即可。- 搭配 
-n、--color、-m等参数可以提升排查效率。 - 如果命中结果过多,将命令与 
less -R或fzf管道组合,能够在终端中进行二次筛选,让排查体验更顺滑。 
