@@ -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'
7382rg -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/**'
96119rg -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
118169rg -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