Linux rgrep命令用于递归地在目录树中搜索包含指定模式的文件。
grep -r命令,它会在当前目录及其所有子目录中递归搜索匹配的文本。
rgrep [选项] [模式] [文件/目录...]
| 选项 | 说明 |
|---|---|
-i |
忽略大小写 |
-v |
反向选择,显示不包含模式的行 |
-n |
显示匹配行的行号 |
-l |
仅显示包含匹配模式的文件名 |
-L |
仅显示不包含匹配模式的文件名 |
-c |
显示匹配的行数计数 |
-w |
匹配整个单词 |
-e 模式 |
指定搜索模式 |
-E |
使用扩展正则表达式 |
-r |
递归搜索子目录(默认行为) |
--include=模式 |
只搜索匹配模式的文件 |
--exclude=模式 |
排除匹配模式的文件 |
--exclude-dir=目录 |
排除指定的目录 |
# 递归搜索包含"hello"的所有文件
rgrep hello
# 等同于
grep -r hello .
# 在 /var/log 目录中递归搜索"error"
rgrep error /var/log
# 在多个目录中搜索
rgrep "pattern" dir1/ dir2/
# 搜索"database",不区分大小写
rgrep -i database /path/to/search
# 这会匹配 Database, DATABASE, database 等
# 搜索并显示文件名和行号
rgrep -n "function" src/
# 输出示例:
# src/main.c:15:void main_function() {
# src/utils.c:42:static void helper_function() {
# 仅列出包含"TODO"的文件名
rgrep -l TODO project/
# 仅列出不包含"TODO"的文件名
rgrep -L TODO project/
# 只在.py文件中搜索
rgrep --include="*.py" "import" src/
# 排除.log文件
rgrep --exclude="*.log" "error" /var/
# 排除.git目录
rgrep --exclude-dir=".git" "password" .
# 使用扩展正则表达式搜索IP地址
rgrep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" /etc/
# 搜索以"test"开头的单词
rgrep -w "test" documents/
# 统计每个文件中匹配的行数
rgrep -c "warning" logs/
# 结合其他命令进行复杂搜索
rgrep -l "error" /var/log/ | wc -l
# 在代码项目中搜索函数定义
rgrep -n "def.*function_name" src/
# 搜索配置文件中的特定设置
rgrep -i "timeout" /etc/
# 查找包含email模式的文件
rgrep -E "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b" .
--exclude-dir排除不必要的目录-i选项进行不区分大小写的搜索会稍微降低搜索速度-I选项忽略二进制文件grep -r作为替代--exclude-dir跳过版本控制目录(如.git, .svn)--include, --exclude)减少搜索范围-m NUM限制每个文件的匹配数量grep - 基本的文本搜索工具egrep - 扩展正则表达式搜索fgrep - 固定字符串搜索find - 根据文件名查找文件ack - 专为代码搜索设计的工具ag - The Silver Searcher,更快的代码搜索工具