grep -r递归搜索文件内容

grep -r 是 Linux/Unix 中用于 递归搜索文件内容 的强大命令,它会遍历指定目录及其所有子目录中的文件,查找匹配的文本模式。尤其适合:

  • 日志分析(如排查错误)。
  • 代码审计(如查找敏感信息)。
  • 配置文件检查(如参数定位)。

以下是详细解析和实用案例:

一、命令语法

grep [选项] -r "搜索模式" [目录或文件]
  • -r(或 --recursive):递归搜索子目录。
  • -R:同 -r,但会跟随符号链接(默认不跟随)。
  • 搜索模式:支持正则表达式(如 "error[0-9]")。

二、核心功能

  1. 递归搜索:自动遍历目录树。
  2. 模式匹配:支持基础正则表达式(BRE)。
  3. 多文件处理:可同时搜索多种文件类型。

三、常用搭配选项

选项作用
-i忽略大小写(如 -i "error" 匹配 ErrorERROR)。
-n显示匹配行的行号。
-l仅显示包含匹配项的文件名(不显示具体内容)。
-v反向匹配(显示不包含模式的行)。
-w全词匹配(如 -w "word" 不匹配 password)。
--include指定文件类型(如 --include="*.py")。
--exclude排除文件类型(如 --exclude="*.log")。
--exclude-dir排除目录(如 --exclude-dir="tmp")。
-A NUM显示匹配行及其后 NUM 行(After)。
-B NUM显示匹配行及其前 NUM 行(Before)。
-C NUM显示匹配行及其前后各 NUM 行(Context)。

四、实用案例

1. 基础递归搜索
# 搜索当前目录及子目录中所有文件的 "ERROR" 关键词
grep -r "ERROR" .

输出格式

./logs/app.log:2023-10-01 10:00:23 ERROR: Connection failed.
./src/utils.py:# TODO: Handle ERROR 404
2. 忽略大小写 + 显示行号
# 搜索所有 Python 文件中的 "import"(不区分大小写)并显示行号
grep -rin "import" --include="*.py" .

输出示例

./src/main.py:3:import os
./src/main.py:5:from utils import logger
3. 仅列出文件名(不显示内容)
# 找出所有包含 "password" 的配置文件(仅显示文件名)
grep -rl "password" /etc/ --include="*.conf"

输出示例

/etc/mysql/my.cnf
/etc/nginx/nginx.conf
4. 排除特定目录
# 搜索代码中的 "TODO",但排除 node_modules 和 .git 目录
grep -r "TODO" --exclude-dir="node_modules" --exclude-dir=".git" .
5. 全词匹配
# 精确匹配单词 "port"(不匹配 "export" 或 "portal")
grep -rw "port" /etc/nginx/
6. 多模式搜索
# 搜索 "error" 或 "warning"(需转义管道符)
grep -r -E "error|warning" /var/log/

或使用 -e 指定多个模式:

grep -r -e "error" -e "warning" /var/log/
7. 显示上下文(调试日志)
# 搜索 "crash" 并显示前后 2 行(上下文)
grep -r -C 2 "crash" /var/log/app/

输出示例

2023-10-01 12:00:01 INFO: Starting process...
2023-10-01 12:00:05 ERROR: Null pointer exception!
2023-10-01 12:00:05 CRASH: Process terminated.
2023-10-01 12:00:06 WARN: Attempting to restart...

五、高级技巧

1. 搜索压缩文件
# 递归搜索 .gz 文件中的内容(需 zgrep)
find /var/log/ -name "*.gz" -exec zgrep "error" {} \;
2. 统计匹配次数
# 统计所有 Java 文件中 "public" 出现的总次数
grep -ro "public" --include="*.java" . | wc -l
3. 高亮显示结果
grep -r --color=auto "TODO" .

六、注意事项

  1. 权限问题
    • 若目录无读取权限,会报 Permission denied。可使用 sudo(需谨慎)。
  2. 二进制文件
    • 默认会搜索二进制文件(可能输出乱码),建议加 -I 忽略二进制文件。
  3. 性能优化
    • 大目录搜索时,用 --include/--exclude 缩小范围。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值