首选:ripgrep
跳转到“首选:ripgrep”rg 在 Windows、Linux 和 macOS 上提供一致语法,默认递归搜索,并自动忽略 .gitignore 中的文件。
# 递归搜索正则表达式,显示行号rg -n "TODO|FIXME" .
# 固定字符串,不解释正则元字符rg -n -F "config.value[0]" src
# 忽略大小写,只搜索 C/C++ 文件rg -n -i --glob "*.{c,cpp,h,hpp}" "timeout" .
# 只列出包含匹配项的文件rg -l "deprecated" .
# 搜索通常被忽略的文件;谨慎使用rg -n --hidden --no-ignore "token" .排除目录使用 --glob "!build/**"。搜索可能包含秘密的目录时,不要把完整匹配结果粘贴到公开日志。
Windows 内置工具
跳转到“Windows 内置工具”PowerShell 的 Select-String 返回结构化匹配对象:
Get-ChildItem -Recurse -File -Filter *.log | Select-String -Pattern 'error|failed' -CaseSensitive:$falsefindstr 适合没有 PowerShell 模块或第三方工具的传统环境:
findstr /s /n /i /c:"exact text" *.txtfindstr /s /n /r "error.*timeout" *.log/s递归子目录。/n显示行号。/i忽略大小写。/c:把带空格的内容视为一个搜索串。/r使用findstr自己的有限正则语法,不等同于 PCRE。
Linux 与 macOS
跳转到“Linux 与 macOS”# 递归、显示行号、忽略大小写grep -Rni -- "error" .
# 固定字符串,并限制文件类型grep -RFn --include='*.log' -- "connection refused" logs/
# 只显示匹配文件或不匹配文件grep -Rl -- "deprecated" src/grep -RL -- "copyright" src/-- 结束选项解析,搜索以 - 开头的文本时尤其重要。
选择与排错
跳转到“选择与排错”| 需求 | 建议 |
|---|---|
| 跨平台项目搜索 | rg |
| PowerShell 管道处理 | Select-String |
| 最小 Windows 环境 | findstr |
| POSIX 脚本或服务器 | grep |
没有结果时依次检查:路径是否正确、文件是否被忽略、大小写、编码、二进制检测和正则方言。查找文件名应使用 rg --files、PowerShell Get-ChildItem 或 find,不要和“搜索文件内容”混为一谈。