grep 命令

作者:程序员小富
链接:https://www.zhihu.com/question/20620445/answer/2059646871497336197
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

做后端开发,日常打交道最多的就是日志。线上出了问题,第一反应不是看监控面板,而是登上机器 grep 日志。

grep "OrderService" /var/log/app/application.log

这条命令我每天至少敲几十次,已经形成肌肉记忆了。

grep 牛就牛在它足够简单,但组合起来能干非常复杂的活。

查线上报错

grep -n "Exception" app.log | tail -50

-n 带行号,tail -50 只看最近 50 条。线上炸了先来这一手,两秒钟定位问题。

按时间段过滤

grep "2026-07-12 14:0[0-5]" app.log

只看 14:00 到 14:05 的日志。正则匹配时间戳,比翻几十万行日志高效太多。

反向排除干扰信息

grep -v "HealthCheck" app.log | grep "ERROR"

-v 排除健康检查的噪音日志,再过滤出 ERROR。线上日志量大的时候,不排除干扰根本看不清问题。

递归搜索代码

grep -rn "deprecated" --include="*.java" src/

-r 递归搜目录,--include 只搜 Java 文件。找某个方法在哪被调用、某个配置项在哪被引用,比 IDE 全局搜索还快,尤其是 SSH 到服务器上没有 IDE 的时候。

统计出现次数

grep -c "timeout" app.log

线上接口超时了,先统计一下 timeout 出现了多少次,心里有个数,判断是偶发还是大面积的。

配合管道组合拳

grep "userId=12345" app.log | grep "pay" | grep -v "query"

三个 grep 串起来,精准定位某个用户的支付相关日志,排除查询类请求。这种组合在排查线上问题时非常实用。


有人可能说 awk、sed 更强大,确实,但 grep 的优势在于零门槛。不用记复杂语法,脑子里想到什么关键词直接敲,几乎不会用错。

awk 和 sed 我也用,但通常是在写脚本或者做数据处理的时候。紧急排障的场景下,grep 管道串几个就够用了,不需要现场回忆 awk 的列分隔语法。

posted @ 2026-07-24 12:37  甜菜波波  阅读(13)  评论(0)    收藏  举报