在日常运维工作中,我们几乎每天都在和日志、配置文件、代码片段打交道。
日志动辄几十 GB,配置文件成百上千行,出问题时,时间永远是最宝贵的资源。

很多同事都会用 grep,但90% 的人只会用最基础的 grep "keyword" file。 结果就是:
今天这篇文章,我不讲 grep 的所有参数,而是分享我在一线运维工作中,真正高频使用、最有价值的 5 个 grep 选项。
只要你把这 5 个选项用熟,你几乎可以在任何复杂场景下,快速定位你想要的内容。
在进入正题之前,先统一一个认知。
grep 是什么?
grep = Global Regular Expression Print
但在运维眼里,它的真实含义是:
无论你是:
grep 几乎是第一反应。
先给大家一个总览,后面逐个展开。
选项作用使用频率-n显示行号⭐⭐⭐⭐⭐-i忽略大小写⭐⭐⭐⭐-v反向匹配⭐⭐⭐⭐⭐-C / -A / -B上下文查看⭐⭐⭐⭐-E扩展正则⭐⭐⭐⭐⭐
这 5 个选项,几乎覆盖了我 80% 的 grep 使用场景。
grep -n "error" application.log
输出类似:
2451:2024-06-01 10:23:11 ERROR Connection timeout
原因很简单:行号 = 定位能力。
没有行号,等于失去坐标。
只要 grep 文件,我几乎条件反射就加 -n
grep -i "error" app.log
等价于:
你一定遇到过这种情况:
grep "error" app.log
# 什么都没匹配到
结果一看日志,全是:
ERROR
与其记大小写,不如让 grep 忽略它。
查日志时,只要关键词是英文,我几乎都会加 -i
grep -v "info" app.log
含义是:显示不包含 info 的行
日志里最常见的是什么?
但我们真正关心的,往往只有:
grep -i "error" app.log | grep -v "timeout"
含义是:
查 error,但排除已知的、无关的 timeout 错误
排查线上告警:
grep -i "error" app.log | grep -v "connection reset"
瞬间把 90% 的“噪音”过滤掉。
-v 是 grep 的“降噪耳机”
一条 ERROR 往往是这样的:
如果你只看命中那一行,信息是不完整的。
grep -n -C 5 "NullPointerException" app.log
输出的不是一行,而是一个完整上下文块。
grep + 上下文,才是真正的“读日志”
-E 启用 扩展正则表达式,让 grep 支持:
grep "error|warn" app.log
# 匹配不到
grep -E "error|warn|exception" app.log
一次查多种关键字:
grep -Ei "error|fail|timeout" app.log
匹配 IP:
grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" access.log
只要涉及“多条件匹配”,我直接上 -E
最后分享几个我在生产环境里天天用的组合命令。
grep -in -C 5 "error" app.log
grep -Ei "error|exception" app.log | grep -v "timeout"
tail -n 1000 app.log | grep -i "error"
更新时间:2026-02-24
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight All Rights Reserved.
Powered By 61893.com 闽ICP备11008920号
闽公网安备35020302035593号