返回
创建于
状态公开

grep 命令实用例子大全

基础搜索

简单文本搜索

bash
1grep "hello" file.txt              # 搜索包含"hello"的行
2grep "user123" /var/log/auth.log   # 在认证日志中搜索特定用户

不区分大小写搜索

bash
1grep -i "error" system.log         # 忽略大小写搜索"error"
2grep -i "warning\|critical" *.log  # 搜索warning或critical

正则表达式搜索

使用基本正则表达式

bash
1grep "^Error" file.log            # 搜索以"Error"开头的行
2grep "completed$" process.log     # 搜索以"completed"结尾的行
3grep "2024-[0-9][0-9]-[0-9][0-9]" dates.txt  # 搜索日期格式

扩展正则表达式

bash
1grep -E "user[0-9]+" users.txt     # 搜索user后跟数字的模式
2grep -E "(error|fail|crash)" log   # 搜索多个关键词
3grep -E "^[A-Z][a-z]+ [0-9]{4}$" data.txt  # 复杂模式匹配

文件和目录操作

递归搜索

bash
1grep -r "function" /home/user/code/    # 递归搜索目录
2grep -r --include="*.py" "import" ./  # 只在Python文件中搜索
3grep -r --exclude="*.log" "config" ./ # 排除日志文件

多文件搜索

bash
1grep "main" *.c *.h               # 在C源文件和头文件中搜索
2grep -l "TODO" *.txt              # 只显示包含匹配的文件名
3grep -L "completed" *.log         # 显示不包含匹配的文件名

上下文显示

显示行号和上下文

bash
1grep -n "exception" error.log     # 显示行号
2grep -C3 "crash" system.log       # 显示前后3行上下文
3grep -A5 -B2 "start" process.log  # 显示后5行前2行

高亮显示

bash
1grep --color=always "pattern" file.txt  # 高亮匹配文本
2grep --color=auto "error" *.log         # 自动决定是否高亮

计数和统计

统计匹配

bash
1grep -c "login" auth.log          # 统计匹配行数
2grep -o "error" log.txt | wc -l   # 统计匹配次数
3grep -v "^#" config.txt | wc -l   # 统计非注释行数

唯一匹配

bash
1grep -o "[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+" access.log | sort -u  # 提取唯一IP地址

反向搜索

排除特定内容

bash
1grep -v "^$" file.txt             # 排除空行
2grep -v "^#" config.ini           # 排除注释行
3grep -v -E "(test|debug)" code.py # 排除测试和调试相关行

实际应用场景

系统管理

日志分析

bash
1# 查找失败的登录尝试
2grep "Failed password" /var/log/auth.log
3
4# 监控磁盘空间警告
5grep -i "disk.*full\|no space" /var/log/syslog
6
7# 查找内存不足错误
8grep -C2 "Out of memory" /var/log/kern.log

进程监控

bash
1# 查找僵尸进程
2ps aux | grep -E "\sZ\s|\s"
3
4# 监控CPU使用率高的进程
5ps aux | grep -v "0.0.*0.0" | head -10

开发调试

代码搜索

bash
1# 查找函数定义
2grep -rn "def.*login" src/
3
4# 查找导入语句
5grep -r "^import\|^from.*import" *.py
6
7# 查找硬编码的IP地址
8grep -rE "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" .

配置文件管理

bash
1# 查找端口配置
2grep -r "port.*[0-9]" /etc/
3
4# 查找数据库连接配置
5grep -ri "database\|mysql\|postgres" config/

网络和安全

访问日志分析

bash
1# 查找404错误
2grep " 404 " /var/log/nginx/access.log
3
4# 查找可疑的访问模式
5grep -E "\.php\?.*=http" access.log
6
7# 统计访问最多的IP
8grep -o "^[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+" access.log | sort | uniq -c | sort -nr

高级技巧

结合其他命令

bash
1# 实时监控日志
2tail -f /var/log/syslog | grep "error"
3
4# 在压缩文件中搜索
5zgrep "pattern" *.gz
6
7# 搜索二进制文件
8grep -a "string" binary_file

性能优化

bash
1# 使用固定字符串搜索(更快)
2fgrep "exact_string" large_file.txt
3
4# 限制搜索深度
5grep -r --max-depth=2 "pattern" /home/

输出格式化

bash
1# 只输出匹配部分
2grep -o "email.*@.*\.com" contacts.txt
3
4# 安静模式(只返回退出状态)
5grep -q "pattern" file && echo "找到了" || echo "未找到"

这些例子涵盖了grep命令的主要使用场景,从基础文本搜索到复杂的系统管理任务,帮助你在日常工作中更高效地处理文本和日志文件。