grep是Linux/Unix系统中强大的文本搜索工具,特别适合日志分析。以下是一些高效使用grep搜索日志的技巧:
# 简单搜索包含"error"的行
grep "error" logfile.log
# 忽略大小写
grep -i "error" logfile.log
# 显示匹配行及其后5行(查看错误上下文)
grep -A 5 "error" logfile.log
# 显示匹配行及其前3行
grep -B 3 "error" logfile.log
# 使用正则表达式搜索
grep -E "error|fail|critical" logfile.log
# 反向搜索(不包含指定内容)
grep -v "debug" logfile.log
# 统计匹配行数
grep -c "404" access.log
# 只显示匹配的部分(而非整行)
grep -o "user_[0-9]\+" logfile.log
# 递归搜索目录下所有文件
grep -r "connection timeout" /var/log/
# 使用--mmap提高大文件搜索性能
grep --mmap "pattern" large_logfile.log
# 使用-f从文件读取多个搜索模式
grep -f search_patterns.txt logfile.log
# 结合zgrep搜索压缩日志
zgrep "error" /var/log/syslog.2.gz
# 结合find实时搜索最新日志
find /var/log -name "*.log" -type f -mtime -1 -exec grep "error" {} +
# 搜索今天出现的错误并统计
grep "error" /var/log/syslog | grep "$(date +'%b %d')" | wc -l
# 搜索特定时间段的日志
grep "error" /var/log/syslog | grep "May 15 10:[0-5][0-9]"
# 多条件组合搜索
grep -E "error|warning" /var/log/syslog | grep -v "connection timeout"
# 将搜索结果保存到文件
grep "error" /var/log/syslog > errors_today.log
掌握这些grep技巧可以显著提高日志分析效率,特别是在处理大型日志文件时。