Administrator
Administrator
发布于 2026-01-13 / 17 阅读
0
0

grep查询日志

使用 grep 在日志文件中查找特定文字是 Linux/Unix 系统中最常用的操作之一。以下是详细、实用的方法汇总:


🔍 基本语法

grep [选项] "要查找的文字" 日志文件路径

✅ 常用示例

1. 简单查找(区分大小写)

grep "error" /var/log/syslog

查找所有包含小写 error 的行。


2. 忽略大小写

grep -i "error" /var/log/nginx/error.log

匹配 Error、ERROR、error 等。


3. 显示行号

grep -n "timeout" app.log

输出:42:Connection timeout occurred(第 42 行)


4. 显示匹配行的上下文

  • 显示匹配行 前后各 3 行:
    grep -C 3 "exception" debug.log
    
  • 仅显示 前 2 行 + 匹配行:
    grep -B 2 "crash" system.log
    
  • 仅显示 匹配行 + 后 5 行:
    grep -A 5 "database" app.log
    

💡 -C = context, -B = before, -A = after


5. 反向查找(排除某内容)

grep -v "INFO" application.log

显示不包含 INFO 的所有行(常用于过滤掉无用日志)。


6. 统计匹配行数

grep -c "404" /var/log/apache2/access.log

输出数字,如 23(表示有 23 次 404 请求)。


7. 递归查找目录下所有日志文件

grep -r "OutOfMemory" /var/log/

在 /var/log/ 及其子目录中所有文件里搜索。

加上 -l 只显示文件名(不显示内容):

grep -rl "password" /var/log/

8. 使用正则表达式

  • 查找以 2025-01- 开头的行(日期):
    grep "^2025-01-" app.log
    
  • 查找包含数字的错误码:
    grep "Error [0-9]\+" app.log
    
  • 使用扩展正则(推荐加 -E):
    grep -E "(timeout|failed|denied)" security.log
    

9. 高亮匹配内容(终端支持颜色时)

grep --color=always "warning" messages.log

或设置别名永久生效:

alias grep='grep --color=auto'

10. 实时监控日志并过滤(结合 tail)

tail -f /var/log/syslog | grep "ssh"

实时显示新增的包含 ssh 的日志行(按 Ctrl+C 退出)。


🛠️ 高级技巧

▶ 多关键词“或”匹配

grep -E "error|critical|fatal" app.log

▶ 多关键词“与”匹配(需同时出现)

grep "error" app.log | grep "database"

▶ 匹配完整单词(避免匹配到子串)

grep -w "load" system.log

不会匹配 loaded 或 reloading。

▶ 查找空行或非空行

grep -v "^$" file.log      # 过滤空行
grep "^$" file.log         # 只显示空行

⚠️ 注意事项

  • 日志文件通常较大,建议配合 less 或 head 使用:
    grep "error" huge.log | less
    
  • 某些日志需 sudo 权限才能读取:
    sudo grep "denied" /var/log/auth.log
    
  • 中文或特殊编码日志:确保终端编码一致(一般 UTF-8 无问题)。

📌 总结:最常用组合

场景命令
快速查错grep -i "error" app.log
实时跟踪tail -f app.log | grep "user123"
统计次数grep -c "404" access.log
上下文排查grep -C 5 "NullPointerException" debug.log

掌握这些,你就能高效地在日志海洋中精准定位问题!


评论