Skip to content

Commit 6288dba

Browse files
committed
docs(cheatsheet): 添加 rg 使用指南与日志排查速查表
新增完整的 rg(ripgrep)命令行工具使用文档,包含: - 基础语法和常用参数说明 - 日志排查的实用命令模板 - PowerShell 环境下的使用技巧 - 正则表达式常用写法 - 高频组合命令模板和常见陷阱提醒
1 parent 5147364 commit 6288dba

1 file changed

Lines changed: 375 additions & 0 deletions

File tree

  • docs/cheatsheet/terminal

docs/cheatsheet/terminal/rg.md

Lines changed: 375 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,375 @@
1+
# rg 使用指南与日志排查速查表
2+
3+
`rg`(ripgrep)是命令行里最常用的文本搜索工具之一,速度快,默认会自动跳过 `.gitignore` 中的内容,也比传统 `grep` 更适合代码库和日志目录。
4+
5+
本文分两部分:
6+
7+
1. 基础使用指南:帮助你快速上手 `rg`
8+
2. 查日志常用操作:直接复制就能用的命令模板
9+
10+
---
11+
12+
## 1. 基础语法
13+
14+
```powershell
15+
rg [选项] PATTERN [PATH ...]
16+
```
17+
18+
常见例子:
19+
20+
```powershell
21+
rg error
22+
rg "timeout"
23+
rg -n -i "connection refused" logs
24+
rg -F "GET /health" .\logs\app.log
25+
```
26+
27+
说明:
28+
29+
- `PATTERN` 默认按正则表达式处理
30+
- `PATH` 不写时,默认搜索当前目录
31+
- 在 PowerShell 中,优先使用单引号包裹模式,例如 `rg 'error|warn'`
32+
- 如果只是查固定字符串,不需要正则,优先用 `-F`,更快也更稳
33+
34+
---
35+
36+
## 2. 最常用参数
37+
38+
| 参数 | 作用 | 示例 |
39+
| :--- | :--- | :--- |
40+
| `-n` | 显示行号 | `rg -n error` |
41+
| `-i` | 忽略大小写 | `rg -i timeout` |
42+
| `-F` | 按固定字符串搜索,不当正则解释 | `rg -F '[ERROR]' logs` |
43+
| `-w` | 按完整单词匹配 | `rg -w error` |
44+
| `-v` | 反向匹配,排除命中行 | `rg -v healthcheck app.log` |
45+
| `-c` | 只显示每个文件的命中次数 | `rg -c error logs` |
46+
| `-l` | 只显示命中的文件名 | `rg -l timeout src` |
47+
| `--files` | 列出可搜索文件,不做正文匹配 | `rg --files` |
48+
| `-g` | 用 glob 限定文件范围 | `rg error -g '*.log'` |
49+
| `-t` | 按文件类型筛选 | `rg TODO -t ps1` |
50+
| `-A 3` | 显示命中后 3 行 | `rg -A 3 error app.log` |
51+
| `-B 3` | 显示命中前 3 行 | `rg -B 3 error app.log` |
52+
| `-C 3` | 显示命中前后各 3 行 | `rg -C 3 error app.log` |
53+
| `--hidden` | 包含隐藏文件 | `rg --hidden token .` |
54+
| `-uuu` | 不忽略隐藏文件、二进制文件、ignore 规则 | `rg -uuu secret .` |
55+
| `--sort path` | 按路径排序输出 | `rg error logs --sort path` |
56+
| `--max-count 20` | 最多显示 20 条命中 | `rg --max-count 20 error logs` |
57+
| `-o` | 仅输出匹配到的片段 | `rg -o '\d{3}' app.log` |
58+
| `--stats` | 输出搜索统计信息 | `rg error logs --stats` |
59+
60+
---
61+
62+
## 3. 基础场景
63+
64+
### 查某个关键词
65+
66+
```powershell
67+
rg -n 'timeout'
68+
```
69+
70+
### 忽略大小写
71+
72+
```powershell
73+
rg -n -i 'error'
74+
```
75+
76+
### 查固定文本而不是正则
77+
78+
如果内容里有 `[``]``(``)``.``*` 这类字符,优先使用 `-F`
79+
80+
```powershell
81+
rg -n -F '[ERROR]' .\logs
82+
```
83+
84+
### 只在某类文件里搜
85+
86+
```powershell
87+
rg -n 'Invoke-' -g '*.ps1'
88+
rg -n 'Exception' -g '*.log' .\logs
89+
rg -n 'TODO' -t md
90+
```
91+
92+
### 排除目录或文件
93+
94+
```powershell
95+
rg -n 'error' .\logs -g '!archive/**'
96+
rg -n 'error' .\logs -g '!*.bak'
97+
```
98+
99+
### 显示上下文
100+
101+
排查问题时,上下文通常比“只看到一行命中”更重要:
102+
103+
```powershell
104+
rg -n -C 2 'NullReferenceException' .\logs\app.log
105+
rg -n -A 5 'panic' .\logs\service.log
106+
rg -n -B 3 'Started request' .\logs\api.log
107+
```
108+
109+
### 只看命中的文件
110+
111+
```powershell
112+
rg -l 'Connection refused' .\logs
113+
```
114+
115+
### 统计命中次数
116+
117+
```powershell
118+
rg -c 'error' .\logs
119+
```
120+
121+
---
122+
123+
## 4. 正则表达式常用写法
124+
125+
### 或条件
126+
127+
```powershell
128+
rg -n 'error|warn|fatal' .\logs
129+
```
130+
131+
### 数字、HTTP 状态码、请求 ID
132+
133+
```powershell
134+
rg -n '\b5\d{2}\b' .\logs
135+
rg -n 'requestId[=: ]+[a-zA-Z0-9-]+' .\logs
136+
```
137+
138+
### 匹配完整单词
139+
140+
避免把 `terror` 里的 `error` 也匹配出来:
141+
142+
```powershell
143+
rg -n -w 'error' .\logs
144+
```
145+
146+
### 多条件同时满足
147+
148+
`rg` 默认不直接写“AND”,通常用 PCRE2:
149+
150+
```powershell
151+
rg -n -P '(?=.*error)(?=.*orderId=12345)' .\logs\app.log
152+
```
153+
154+
说明:
155+
156+
- `-P` 启用 PCRE2,适合高级正则
157+
- 复杂正则性能可能明显下降,只在确实需要时使用
158+
159+
---
160+
161+
## 5. PowerShell 下的实用写法
162+
163+
### 搜当前目录所有可搜索文件
164+
165+
```powershell
166+
rg --files
167+
```
168+
169+
### 搜最近修改的日志文件
170+
171+
先筛出最近修改的文件,再交给 `rg`
172+
173+
```powershell
174+
Get-ChildItem .\logs -File |
175+
Sort-Object LastWriteTime -Descending |
176+
Select-Object -First 10 |
177+
ForEach-Object { rg -n 'error|warn' $_.FullName }
178+
```
179+
180+
### 只搜 `.log``.txt`
181+
182+
```powershell
183+
rg -n 'timeout' .\logs -g '*.log' -g '*.txt'
184+
```
185+
186+
### 输出结果再继续处理
187+
188+
```powershell
189+
$matches = rg -n 'error' .\logs
190+
$matches | Select-Object -First 20
191+
```
192+
193+
---
194+
195+
## 6. 查日志常用操作 Cheatsheet
196+
197+
下面这些命令适合直接复制后改关键词。
198+
199+
### 查错误、告警、异常
200+
201+
```powershell
202+
rg -n -i 'error|warn|fatal|exception|panic' .\logs -g '*.log'
203+
```
204+
205+
### 查某个接口或路径
206+
207+
```powershell
208+
rg -n -F 'GET /api/orders' .\logs -g '*.log'
209+
rg -n -F '/health' .\logs -g '*.log'
210+
```
211+
212+
### 查某个用户、订单号、请求 ID
213+
214+
```powershell
215+
rg -n 'userId=12345' .\logs
216+
rg -n 'orderId=20260319001' .\logs
217+
rg -n 'requestId=9f1c2d3e' .\logs
218+
```
219+
220+
### 查 5xx / 4xx
221+
222+
```powershell
223+
rg -n '\b5\d{2}\b' .\logs -g '*.log'
224+
rg -n '\b4\d{2}\b' .\logs -g '*.log'
225+
```
226+
227+
### 查超时、重试、连接失败
228+
229+
```powershell
230+
rg -n -i 'timeout|timed out|retry|connection refused|broken pipe' .\logs
231+
```
232+
233+
### 查启动失败、配置加载失败
234+
235+
```powershell
236+
rg -n -i 'failed to start|startup failed|config.*failed|load.*config' .\logs
237+
```
238+
239+
### 查某段时间附近的上下文
240+
241+
如果你已经知道某个时间点字符串,可以先定位,再带上下文查看:
242+
243+
```powershell
244+
rg -n -C 5 '2026-03-19 10:15' .\logs\app.log
245+
rg -n -C 8 '10:15:3' .\logs\app.log
246+
```
247+
248+
### 排除噪音日志
249+
250+
例如排除健康检查、探针、静态资源请求:
251+
252+
```powershell
253+
rg -n -i 'error|warn' .\logs -g '*.log' | rg -v 'health|/metrics|/favicon.ico'
254+
```
255+
256+
### 找出“哪些文件”出现过异常
257+
258+
```powershell
259+
rg -l -i 'error|fatal|exception' .\logs -g '*.log'
260+
```
261+
262+
### 统计每个日志文件里错误数量
263+
264+
```powershell
265+
rg -c -i 'error|fatal|exception' .\logs -g '*.log'
266+
```
267+
268+
### 只看前几条命中,快速判断方向
269+
270+
```powershell
271+
rg -n -i 'exception|panic' .\logs --max-count 20
272+
```
273+
274+
### 搜压缩日志
275+
276+
如果日志是 `.gz``.zip``.bz2` 等压缩格式,可尝试:
277+
278+
```powershell
279+
rg -n -z 'error|exception' .\logs
280+
```
281+
282+
说明:
283+
284+
- `-z` 会尝试搜索常见压缩文件内容
285+
- 大文件和压缩包较多时,速度会明显下降
286+
287+
---
288+
289+
## 7. 高频组合模板
290+
291+
### 模板 1:在日志目录中查错误并带上下文
292+
293+
```powershell
294+
rg -n -i -C 3 'error|fatal|exception' .\logs -g '*.log'
295+
```
296+
297+
### 模板 2:查固定请求路径
298+
299+
```powershell
300+
rg -n -F '/api/orders/submit' .\logs -g '*.log'
301+
```
302+
303+
### 模板 3:查某个 ID,并看前后 10 行
304+
305+
```powershell
306+
rg -n -C 10 'requestId=abc-123' .\logs
307+
```
308+
309+
### 模板 4:查错误但过滤健康检查噪音
310+
311+
```powershell
312+
rg -n -i 'error|warn|fatal' .\logs -g '*.log' | rg -v 'health|metrics|readiness|liveness'
313+
```
314+
315+
### 模板 5:只看最近几个文件里的异常
316+
317+
```powershell
318+
Get-ChildItem .\logs -File |
319+
Sort-Object LastWriteTime -Descending |
320+
Select-Object -First 5 |
321+
ForEach-Object { rg -n -i 'error|exception|panic' $_.FullName }
322+
```
323+
324+
---
325+
326+
## 8. 常见坑
327+
328+
### 正则特殊字符误伤
329+
330+
这类命令容易搜不准:
331+
332+
```powershell
333+
rg '[ERROR]' .\logs
334+
```
335+
336+
因为 `[]` 会被当成正则字符集合。更稳的写法:
337+
338+
```powershell
339+
rg -F '[ERROR]' .\logs
340+
```
341+
342+
### PowerShell 引号问题
343+
344+
优先写成:
345+
346+
```powershell
347+
rg -n 'error|warn' .\logs
348+
```
349+
350+
尽量少用双引号,除非你明确需要 PowerShell 变量插值。
351+
352+
### 没搜到隐藏目录或被 ignore 规则忽略
353+
354+
```powershell
355+
rg -n 'secret' . --hidden
356+
rg -n 'secret' . -uuu
357+
```
358+
359+
### 二进制文件默认被跳过
360+
361+
如果怀疑目标内容在二进制或特殊文件里,可以尝试:
362+
363+
```powershell
364+
rg -n -uuu 'keyword' .
365+
```
366+
367+
---
368+
369+
## 9. 一句话建议
370+
371+
- 查固定文本,用 `-F`
372+
- 排查日志,用 `-n -i -C 3`
373+
- 先缩小文件范围,再搜正文,例如 `-g '*.log'`
374+
- 先看前 20 条,再决定是否扩大范围
375+
- 复杂 AND 条件最后再上 `-P`

0 commit comments

Comments
 (0)