Skip to content

Commit b54dd43

Browse files
committed
docs(cheatsheet/terminal/rg): 添加过滤超长行使用指南并重构常见问题章节
- 新增"过滤超长行"章节,详细介绍处理日志中JSON、Base64等超长文本的方法 - 提供多种解决方案:使用-M参数、--max-columns-preview选项、PCRE2正则过滤 - 补充PowerShell管道处理方式和字节数与字符数区别说明 - 将原"常见坑"章节重新编号为第9节,"一句话建议"调整为第10节 - 完善代码示例和使用场景说明
1 parent 6288dba commit b54dd43

1 file changed

Lines changed: 92 additions & 2 deletions

File tree

  • docs/cheatsheet/terminal

docs/cheatsheet/terminal/rg.md

Lines changed: 92 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,97 @@ Get-ChildItem .\logs -File |
323323

324324
---
325325

326-
## 8. 常见坑
326+
## 8. 过滤超长行
327+
328+
日志里经常会出现超长 JSON、Base64、堆栈展开、压缩后的单行文本。这类内容会影响终端可读性,也容易把有效信息淹没。
329+
330+
### 只是不想完整打印超长行
331+
332+
如果你的目标是“搜索仍然照常进行,但不要把超长行原样输出”,直接用 `-M`
333+
334+
```powershell
335+
rg -n -M 300 'error|warn|exception' .\logs -g '*.log'
336+
```
337+
338+
说明:
339+
340+
- `-M 300` 表示超过 300 字节的行不完整打印
341+
- 默认会用一条提示信息代替原始长行
342+
- 这更适合先快速扫一遍日志
343+
344+
### 长行只保留前面一段预览
345+
346+
如果你想保留前面一部分内容,方便判断是不是目标日志,可以加 `--max-columns-preview`
347+
348+
```powershell
349+
rg -n -M 300 --max-columns-preview 'error|warn|exception' .\logs -g '*.log'
350+
```
351+
352+
这适合排查以下场景:
353+
354+
- 日志前缀里有时间、级别、模块名
355+
- 后半段是很长的 JSON 或请求体
356+
- 你只想先看开头判断是否值得继续深挖
357+
358+
### 真正过滤掉超长行
359+
360+
如果你的目标是“只匹配长度不超过 300 个字符的行”,可以用 PCRE2:
361+
362+
```powershell
363+
rg -n -P '^(?=.{0,300}$).*(error|warn|exception)' .\logs -g '*.log'
364+
```
365+
366+
说明:
367+
368+
- `(?=.{0,300}$)` 先限制整行长度不超过 300 个字符
369+
- 后面的 `.*(error|warn|exception)` 再判断该行是否包含目标关键词
370+
- 这种写法属于真正按长度过滤,不只是输出裁剪
371+
372+
### 只保留短行,再继续做 PowerShell 处理
373+
374+
如果你后面还要继续做排序、截取、格式化,PowerShell 管道会更灵活:
375+
376+
```powershell
377+
Get-Content .\logs\app.log |
378+
Where-Object { $_.Length -le 300 } |
379+
rg -n 'error|warn|exception'
380+
```
381+
382+
也可以先过滤,再看前几条:
383+
384+
```powershell
385+
Get-Content .\logs\app.log |
386+
Where-Object { $_.Length -le 300 -and $_ -match 'error|warn|exception' } |
387+
Select-Object -First 20
388+
```
389+
390+
### 过滤长行但保留文件名与行号
391+
392+
如果你搜的是多个文件,又想保留定位信息,优先仍然用 `rg`
393+
394+
```powershell
395+
rg -n -P '^(?=.{0,300}$).*(timeout|connection refused|panic)' .\logs -g '*.log'
396+
```
397+
398+
因为 `Get-Content` 管道虽然灵活,但默认会丢掉“来自哪个文件、原始第几行”的上下文。
399+
400+
### 字节数和字符数的区别
401+
402+
这点在中文日志里尤其重要:
403+
404+
- `-M 300` 按字节数限制
405+
- `$_ .Length``.{0,300}` 更接近按字符数限制
406+
- 如果日志中包含较多中文、emoji 或其他非 ASCII 内容,`-M 300` 和“300 个字符”不一定等价
407+
408+
实际建议:
409+
410+
- 只是嫌输出太长,用 `-M 300 --max-columns-preview`
411+
- 需要严格过滤长行,用 `-P '^(?=.{0,300}$)...'`
412+
- 后面还要继续做筛选整形,用 PowerShell 管道
413+
414+
---
415+
416+
## 9. 常见坑
327417

328418
### 正则特殊字符误伤
329419

@@ -366,7 +456,7 @@ rg -n -uuu 'keyword' .
366456

367457
---
368458

369-
## 9. 一句话建议
459+
## 10. 一句话建议
370460

371461
- 查固定文本,用 `-F`
372462
- 排查日志,用 `-n -i -C 3`

0 commit comments

Comments
 (0)