Files

395 lines
7.5 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 别再无脑敲 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)
复制搜一搜
复制搜一搜
暂无评论