跳转到内容
新建笔记

跨平台文本搜索

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/**"。搜索可能包含秘密的目录时,不要把完整匹配结果粘贴到公开日志。

PowerShell 的 Select-String 返回结构化匹配对象:

终端窗口
Get-ChildItem -Recurse -File -Filter *.log |
Select-String -Pattern 'error|failed' -CaseSensitive:$false

findstr 适合没有 PowerShell 模块或第三方工具的传统环境:

终端窗口
findstr /s /n /i /c:"exact text" *.txt
findstr /s /n /r "error.*timeout" *.log
  • /s 递归子目录。
  • /n 显示行号。
  • /i 忽略大小写。
  • /c: 把带空格的内容视为一个搜索串。
  • /r 使用 findstr 自己的有限正则语法,不等同于 PCRE。
终端窗口
# 递归、显示行号、忽略大小写
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,不要和“搜索文件内容”混为一谈。