vault backup: 2026-11-07 16:33:44

This commit is contained in:
cheney
2026-11-07 16:33:55 +08:00
commit 7015312702
1208 changed files with 132432 additions and 0 deletions
+395
View File
@@ -0,0 +1,395 @@
# 别再无脑敲 grep 了,我靠这 5 个选项,定位问题速度提升 10 倍
在日常运维工作中,我们几乎每天都在和日志、配置文件、代码片段打交道。
日志动辄几十 GB,配置文件成百上千行,出问题时,时间永远是最宝贵的资源。
![图片](https://mmbiz.qpic.cn/mmbiz_jpg/RM9Y4OF1SX5OHeNFZFN9hDslQrhUfskobg63D6pWb1EfFWrR3OoHqHh7qUaEFXpPe1p5XrAO4jS9Rb980pprdw/640?wx_fmt=jpeg&from=appmsg&wxfrom=13&tp=wxpic#imgIndex=1)
很多同事都会用 grep,但**90% 的人只会用最基础的 grep "keyword" file**。 结果就是:
- 要么匹配不准
- 要么结果一大堆
- 要么漏掉关键信息
今天这篇文章,我不讲 grep 的所有参数,而是分享**我在一线运维工作中,真正高频使用、最有价值的 5 个 grep 选项**。
只要你把这 5 个选项用熟,**你几乎可以在任何复杂场景下,快速定位你想要的内容**。
在进入正题之前,先统一一个认知。
grep 是什么?
> grep = Global Regular Expression Print
但在运维眼里,它的真实含义是:
- 日志分析利器
- 故障定位放大镜
- 海量文本的“手术刀”
无论你是:
- 查 Nginx / Tomcat / MySQL 日志
- 翻 Kubernetes 容器日志
- 排查线上报错
- 审计配置变更
- 甚至简单查代码
**grep 几乎是第一反应。**
## 我最常用的 5 个 grep 选项总览
先给大家一个总览,后面逐个展开。
|选项|作用|使用频率|
|---|---|---|
|`-n`|显示行号|⭐⭐⭐⭐⭐|
|`-i`|忽略大小写|⭐⭐⭐⭐|
|`-v`|反向匹配|⭐⭐⭐⭐⭐|
|`-C / -A / -B`|上下文查看|⭐⭐⭐⭐|
|`-E`|扩展正则|⭐⭐⭐⭐⭐|
这 5 个选项,**几乎覆盖了我 80% 的 grep 使用场景**。
## 行号
### 1️⃣ 基本用法
```
grep -n "error" application.log
```
输出类似:
```
2451:2024-06-01 10:23:11 ERROR Connection timeout
```
### 2️⃣ 为什么我几乎永远带 `-n`
原因很简单:**行号 = 定位能力**。
- 你要和同事对齐信息
- 你要回到文件中继续分析
- 你要用 sed / vim / awk 二次处理
**没有行号,等于失去坐标。**
### 3️⃣ 实战场景
- 让开发快速定位代码或日志位置
- 在 vim 里 `:2451` 直接跳转
- 用 sed 精确截取问题区间
只要 grep 文件,我几乎条件反射就加 -n
## `-i`:别让大小写浪费你的时间
### 1️⃣ 基本用法
```
grep -i "error" app.log
```
等价于:
- error
- Error
- ERROR
- eRrOr
### 2️⃣ 真实痛点
你一定遇到过这种情况:
```
grep "error" app.log# 什么都没匹配到
```
结果一看日志,全是:
```
ERROR
```
### 3️⃣ 运维经验
- 日志格式不统一
- 不同组件输出风格不同
- 第三方程序你根本控制不了
**与其记大小写,不如让 grep 忽略它。**
### 4️⃣ 建议
> **查日志时,只要关键词是英文,我几乎都会加 -i**
## `-v`:排除干扰信息,快速聚焦重点
### 1️⃣ `-v` 是什么
```
grep -v "info" app.log
```
含义是:**显示不包含 info 的行**
### 2️⃣ 为什么 `-v` 在运维中非常重要
日志里最常见的是什么?
- INFO
- DEBUG
- 心跳日志
- 健康检查
但我们真正关心的,往往只有:
- ERROR
- WARN
- Exception
### 3️⃣ 经典组合用法
```
grep -i "error" app.log | grep -v "timeout"
```
含义是:
> 查 error,但排除已知的、无关的 timeout 错误
### 4️⃣ 实战案例
排查线上告警:
```
grep -i "error" app.log | grep -v "connection reset"
```
**瞬间把 90% 的“噪音”过滤掉。**
-v 是 grep 的“降噪耳机”
## `-C / -A / -B`:只看一行,等于没看日志
### 1️⃣ 为什么只看一行日志是不够的
一条 ERROR 往往是这样的:
- 前几行:请求参数
- 当前行:错误提示
- 后几行:堆栈信息
如果你只看命中那一行,**信息是不完整的**。
### 2️⃣ 常用参数说明
- `-A n`:显示匹配行 **后 n 行**
- `-B n`:显示匹配行 **前 n 行**
- `-C n`:显示前后各 n 行
### 3️⃣ 实战示例
```
grep -n -C 5 "NullPointerException" app.log
```
输出的不是一行,而是一个**完整上下文块**。
### 4️⃣ 典型使用场景
- Java 堆栈分析
- 请求链路排查
- 分析程序执行路径
grep + 上下文,才是真正的“读日志”
## `-E`:让 grep 真正“强大”的关键
### 1️⃣ 什么是 `-E`
`-E` 启用 **扩展正则表达式**,让 grep 支持:
- `|`(或)
- `+`
- `?`
- `()` 分组
### 2️⃣ 没有 `-E` 的痛苦
```
grep "error|warn" app.log# 匹配不到
```
### 3️⃣ 正确用法
```
grep -E "error|warn|exception" app.log
```
### 4️⃣ 高频实战场景
一次查多种关键字:
```
grep -Ei "error|fail|timeout" app.log
```
匹配 IP:
```
grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" access.log
```
只要涉及“多条件匹配”,我直接上 -E
## 我最常用的 grep 组合拳
最后分享几个我在生产环境里**天天用的组合命令**。
### 1️⃣ 查错误并带上下文
```
grep -in -C 5 "error" app.log
```
### 2️⃣ 查错误,排除已知无关问题
```
grep -Ei "error|exception" app.log | grep -v "timeout"
```
### 3️⃣ 查最近错误(配合 tail)
```
tail -n 1000 app.log | grep -i "error"
```
![图片](https://mmbiz.qpic.cn/mmbiz_gif/RM9Y4OF1SX5XhQUbo4olZCcxb5hTByomPsrenaH3ZhKcgQSIs0kQXbgMvwEz10eyxqICaol72LVWTbicKZGCSSg/640?wx_fmt=gif&from=appmsg&tp=wxpic&wxfrom=5&wx_lazy=1#imgIndex=2)
**大事!运维漫谈-技术交流群对外开放!**
扫码可添加小编微信,**申请进****群**
![图片](https://mmbiz.qpic.cn/mmbiz_png/RM9Y4OF1SX5XhQUbo4olZCcxb5hTByomDjtGvbs0jkgfC5qdpeOibicJ1IwoUibyzovnkkMkTg5EYSIIJia8W4guoQ/640?wx_fmt=png&from=appmsg&tp=wxpic&wxfrom=5&wx_lazy=1#imgIndex=3)
▲长按加群
![](http://mmbiz.qpic.cn/mmbiz_png/RM9Y4OF1SX5ASLKxja0ObTV9vdZwcsdFADfftKnMeb7DS85FhSs8ZmKb0jf39U7IPNUicDt2yeHBsUSUj1ogiaWw/300?wx_fmt=png&wxfrom=19)
**运维漫谈**
运维漫谈,漫谈整个网络安全、云计算、大数据、数据库、开发等运维技术干货,旨在分享干货,帮您更快学习相关知识,解决问题,同时还有福利活动哦,关注我,带你成为大神,遨游技术海洋!
922篇原创内容
公众号
![图片](https://mmbiz.qpic.cn/mmbiz_gif/RM9Y4OF1SX7kdQVRP5vWRpjNrNTjndnRJcvictBxxgqovlG2iau6pcBaSk6fhIGfhUwZobImYJssgcX0qbiaTowxg/640?wx_fmt=gif&tp=wxpic&wxfrom=5&wx_lazy=1#imgIndex=4)
Linux · 目录
上一篇这6个工具,让你的Linux监控如鱼得水,运维效率翻倍!下一篇如何查看 Ubuntu 服务器到底什么时候重启的?
阅读 3351
grep上下文参数
​
**留言 1**
写留言
- ![](https://wx.qlogo.cn/mmopen/BpFYwrSatCickbsJuTwvHf5ASYXbKSyQYTTX9xYzj2eBNCPx7NnGjsTUoiciaAVNZjiass6MBmA1Nymw3kyMyNbwO87ibhJ1rzTcwhhW5kAffMEvia3cEibnrBiaoDI1g4icDBne9/64)
亮
北京23小时前
赞
grep -Rni
已无更多数据
[](javacript:;)
![](https://mmbiz.qpic.cn/mmbiz_png/RM9Y4OF1SX5ASLKxja0ObTV9vdZwcsdFADfftKnMeb7DS85FhSs8ZmKb0jf39U7IPNUicDt2yeHBsUSUj1ogiaWw/300?wx_fmt=png&wxfrom=18)
运维漫谈
关注
76
295
58
1
![](https://wx.qlogo.cn/mmopen/PiajxSqBRaEIFbetu020KHTmFaHibhvXCAOkgwT2u7pHbvyJSmY4m3cjqr1AqiaT55soKLk7YhT5v7hJscgmsc2bg/96)
复制搜一搜
复制搜一搜
暂无评论