grep 与正则表达式:日志分析实战技巧
grep 是日志分析的必备工具,结合正则表达式可实现精准过滤。
1. 基础用法
# 简单搜索
grep "ERROR" app.log
# 忽略大小写
grep -i "warning" *.log
# 显示行号
grep -n "Exception" app.log
# 显示匹配上下文
grep -B 2 -A 3 "NullPointer" app.log # 前2行后3行2. 扩展正则 ( -E / egrep)
# 匹配 IP 地址(使用 [.] 代替 \.)
grep -E '([0-9]{1,3}[.]){3}[0-9]{1,3}' access.log
# 匹配邮箱(使用 [.] 代替 \.)
grep -E '[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+[.][A-Z|a-z]{2,}' contacts.txt
# 匹配日期 (YYYY-MM-DD)
grep -E '[0-9]{4}-[0-9]{2}-[0-9]{2}' app.log3. 统计与过滤
# 统计错误次数
grep -c "ERROR" app.log
# 统计不同错误类型
grep -o "ERROR:.*" app.log | sort | uniq -c | sort -nr
# 排除特定行
grep -v "DEBUG" app.log4. 组合 find 与 xargs
# 在所有 .log 文件中搜索 "500"
find /var/log -name "*.log" -exec grep -l "500" {} \;
# 使用 xargs 并行搜索
find . -name "*.log" | xargs grep "Fatal"5. 性能优化
- 使用
-F禁用正则(纯字符串搜索)加速。 - 大文件先
grep再管道。 - 使用
--mmap(已废弃)或--direct-io但一般无需。
