Skip to content

Commit 284dba6

Browse files
committed
docs(cheatsheet): 更新 ripgrep 命令行工具速查表
添加了更多实用的 ripgrep 选项说明,包括: - 新增智能大小写选项 -S,支持全小写时忽略大小写,出现大写时区分大小写 - 添加显式模式指定选项 -e,用于搜索以 - 开头的模式 - 增加 --count-matches 选项,显示总匹配次数而非命中行数 - 添加 --files-without-match 选项,显示未命中的文件名 - 扩展 ignore 规则相关选项说明,包括 --no-ignore、--no-ignore-vcs、-uu、-uuu - 新增 --max-filesize 选项,跳过超过指定体积的文件 - 添加 -U
1 parent b54dd43 commit 284dba6

1 file changed

Lines changed: 102 additions & 1 deletion

File tree

  • docs/cheatsheet/terminal

docs/cheatsheet/terminal/rg.md

Lines changed: 102 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,22 +39,31 @@ rg -F "GET /health" .\logs\app.log
3939
| :--- | :--- | :--- |
4040
| `-n` | 显示行号 | `rg -n error` |
4141
| `-i` | 忽略大小写 | `rg -i timeout` |
42+
| `-S` | 智能大小写:模式全小写时忽略大小写,出现大写时改为区分大小写 | `rg -S error` |
43+
| `-e` | 显式指定搜索模式,适合模式以 `-` 开头时使用 | `rg -e '--help'` |
4244
| `-F` | 按固定字符串搜索,不当正则解释 | `rg -F '[ERROR]' logs` |
4345
| `-w` | 按完整单词匹配 | `rg -w error` |
4446
| `-v` | 反向匹配,排除命中行 | `rg -v healthcheck app.log` |
4547
| `-c` | 只显示每个文件的命中次数 | `rg -c error logs` |
48+
| `--count-matches` | 显示每个文件的总匹配次数,而不只是命中行数 | `rg --count-matches error logs` |
4649
| `-l` | 只显示命中的文件名 | `rg -l timeout src` |
50+
| `--files-without-match` | 只显示没有命中的文件名 | `rg --files-without-match TODO docs` |
4751
| `--files` | 列出可搜索文件,不做正文匹配 | `rg --files` |
4852
| `-g` | 用 glob 限定文件范围 | `rg error -g '*.log'` |
4953
| `-t` | 按文件类型筛选 | `rg TODO -t ps1` |
5054
| `-A 3` | 显示命中后 3 行 | `rg -A 3 error app.log` |
5155
| `-B 3` | 显示命中前 3 行 | `rg -B 3 error app.log` |
5256
| `-C 3` | 显示命中前后各 3 行 | `rg -C 3 error app.log` |
5357
| `--hidden` | 包含隐藏文件 | `rg --hidden token .` |
54-
| `-uuu` | 不忽略隐藏文件、二进制文件、ignore 规则 | `rg -uuu secret .` |
58+
| `--no-ignore` | 不遵守 `.gitignore``.ignore``.rgignore` 等 ignore 规则 | `rg --no-ignore secret .` |
59+
| `--no-ignore-vcs` | 只不遵守版本控制 ignore 规则,例如 `.gitignore` | `rg --no-ignore-vcs dist .` |
60+
| `-uu` | 等价于 `--no-ignore --hidden`,仍默认跳过二进制文件 | `rg -uu secret .` |
61+
| `-uuu` | 等价于 `--no-ignore --hidden --binary`,几乎关闭默认过滤 | `rg -uuu secret .` |
5562
| `--sort path` | 按路径排序输出 | `rg error logs --sort path` |
5663
| `--max-count 20` | 最多显示 20 条命中 | `rg --max-count 20 error logs` |
64+
| `--max-filesize 10M` | 跳过超过指定体积的文件 | `rg error logs --max-filesize 10M` |
5765
| `-o` | 仅输出匹配到的片段 | `rg -o '\d{3}' app.log` |
66+
| `-U` | 启用多行搜索,允许匹配跨越换行符 | `rg -U 'BEGIN[\\s\\S]*END' app.log` |
5867
| `--stats` | 输出搜索统计信息 | `rg error logs --stats` |
5968

6069
---
@@ -73,6 +82,20 @@ rg -n 'timeout'
7382
rg -n -i 'error'
7483
```
7584

85+
### 智能大小写
86+
87+
如果你想要“全小写时宽松匹配,写了大写时严格匹配”,用 `-S``-i` 更顺手:
88+
89+
```powershell
90+
rg -n -S 'error'
91+
rg -n -S 'NullReferenceException'
92+
```
93+
94+
说明:
95+
96+
- `rg -S 'error'` 会匹配 `error``Error``ERROR`
97+
- `rg -S 'NullReferenceException'` 会因为模式里出现大写,自动切换为区分大小写
98+
7699
### 查固定文本而不是正则
77100

78101
如果内容里有 `[``]``(``)``.``*` 这类字符,优先使用 `-F`
@@ -96,6 +119,34 @@ rg -n 'error' .\logs -g '!archive/**'
96119
rg -n 'error' .\logs -g '!*.bak'
97120
```
98121

122+
### 搜索以 `-` 开头的模式
123+
124+
如果模式本身长得像参数,例如 `--help``-ErrorAction`,要用 `-e` 明确告诉 `rg` 后面是模式,不是选项:
125+
126+
```powershell
127+
rg -n -e '--help' .\docs
128+
rg -n -e '-ErrorAction' .\scripts
129+
```
130+
131+
### 不想遵守 `.gitignore`
132+
133+
`rg` 默认会遵守 `.gitignore`。如果你想把 Git 忽略的文件也一起搜出来,优先用下面这几种:
134+
135+
```powershell
136+
rg -n --no-ignore-vcs 'dist' .
137+
rg -n --no-ignore 'dist' .
138+
rg -n -uu 'secret' .
139+
rg -n -uuu 'secret' .
140+
```
141+
142+
说明:
143+
144+
- `--no-ignore-vcs` 只关闭 Git 这类版本控制的 ignore 规则;如果你只是想“不要管 `.gitignore`”,优先用它
145+
- `--no-ignore` 会连 `.ignore``.rgignore`、全局 ignore 一起关闭,范围更大
146+
- `--hidden` 只负责“包含隐藏文件”,不会自动取消 `.gitignore`
147+
- `-uu` 适合“连隐藏文件和 ignore 文件都一起搜,但仍不碰二进制文件”
148+
- `-uuu` 更激进,适合排查“明明有内容却怎么都搜不到”的情况
149+
99150
### 显示上下文
100151

101152
排查问题时,上下文通常比“只看到一行命中”更重要:
@@ -118,6 +169,56 @@ rg -l 'Connection refused' .\logs
118169
rg -c 'error' .\logs
119170
```
120171

172+
如果你想统计“总共匹配了多少次”,而不是“多少行里出现过匹配”,改用:
173+
174+
```powershell
175+
rg --count-matches 'error' .\logs
176+
```
177+
178+
说明:
179+
180+
- `-c` 统计的是命中行数
181+
- `--count-matches` 统计的是实际匹配次数
182+
- 一行里如果出现多个 `error`,两者结果可能不同
183+
184+
### 只看没命中的文件
185+
186+
找“缺少某个配置”或“哪些文件还没包含某段文本”时很方便:
187+
188+
```powershell
189+
rg --files-without-match 'Set-StrictMode' .\scripts -g '*.ps1'
190+
rg --files-without-match '^# ' .\docs -g '*.md'
191+
```
192+
193+
### 跳过超大文件
194+
195+
日志目录或仓库里有超大文件时,可以先限制文件体积,避免搜索明显变慢:
196+
197+
```powershell
198+
rg -n 'error' .\logs --max-filesize 10M
199+
rg -n 'TODO' . --max-filesize 1M
200+
```
201+
202+
说明:
203+
204+
- `--max-filesize 10M` 表示跳过大于 10 MB 的文件
205+
- 这更适合先快速筛查,再决定是否单独查看大文件
206+
207+
### 跨多行搜索
208+
209+
默认情况下,`rg` 按“单行”匹配;如果模式需要跨越换行符,必须加 `-U`
210+
211+
```powershell
212+
rg -n -U 'BEGIN[\s\S]*END' .\logs\app.log
213+
rg -n -U --multiline-dotall 'error.*stack trace' .\logs\app.log
214+
```
215+
216+
说明:
217+
218+
- `-U` 启用 multiline 模式,允许匹配跨行内容
219+
- `.` 默认不会跨过换行;想让 `.` 也匹配换行,可再加 `--multiline-dotall`
220+
- 多行搜索通常更慢,也更吃内存,优先先缩小文件范围
221+
121222
---
122223

123224
## 4. 正则表达式常用写法

0 commit comments

Comments
 (0)