一 核心基础:精准定位关键词 + 上下文(最常用)
-
基础用法:匹配关键词 + 显示上下文
# 找 a.log 中含 "ERROR" 的行,同时显示前3行(-B3)、后5行(-A5) grep -B 3 -A 5 "ERROR" a.log # 简化:-C5 = -B5 -A5(显示前后各5行),更常用 grep -C 5 "ERROR" a.log -
增强版:显示行号 + 忽略大小写(方便定位)
# -n:显示匹配行的行号;-i:忽略大小写(比如匹配 Error/error/ERROR) grep -n -i -C 5 "timeout" a.log -
多关键词匹配(或 / 且)
# 匹配 "ERROR" 或 "WARN" 或 "timeout"(任意一个) grep -E "ERROR|WARN|timeout" a.log # 匹配含 "ERROR" 且 含 "timeout" 的行(同时满足) grep "ERROR" a.log | grep "timeout" # 匹配 "ERROR" 但排除 "ignored"(忽略无关错误) grep "ERROR" a.log | grep -v "ignored"
二 按时间范围筛选(日志带时间戳时超实用)
# 筛选 2026-02-09 10:20 到 10:30 之间的日志
sed -n '/2026-02-09 10:20:/,/2026-02-09 10:30:/p' a.log
# 结合 grep 进一步筛选该时间段内的 ERROR
sed -n '/2026-02-09 10:20:/,/2026-02-09 10:30:/p' a.log | grep -C 3 "ERROR"
三 实时监控日志(排查正在发生的问题)
# 实时监控 a.log 的新增内容(-f:follow 跟踪)
tail -f a.log
# 只监控新增的 ERROR 日志(最常用)
tail -f a.log | grep -i "ERROR"
# 更健壮的实时监控(-F:日志文件被切割/替换后仍能继续监控)
tail -F a.log | grep -C 2 "timeout"
四 按行号定位(已知大概行号 / 从 grep 结果跳转)
# 查看 100-110 行的内容(定位 105 行的上下文)
sed -n '100,110p' a.log
# 只看第 105 行
sed -n '105p' a.log
五 统计高频问题(找最常出现的错误)
# 统计 ERROR 出现的总次数
grep "ERROR" a.log | wc -l
# 找出所有唯一的 ERROR 信息,并按出现次数降序排列(重点看高频)
grep "ERROR" a.log | sort | uniq -c | sort -nr
六 进阶:复杂日志(比如多列 / JSON 日志)
# 筛选日志中第 5 列是 "500" 的行(比如 HTTP 500 错误)
awk '$5 == "500"' a.log
# 结合 grep 查看这些 500 错误的上下文
awk '$5 == "500"' a.log | grep -C 2 "api/user"
总结
- 核心高频:
grep -n -i -C 5 "关键词" 日志文件(定位关键词 + 上下文 + 行号); - 实时排查:
tail -F 日志文件 | grep "关键词"(监控实时新增的问题日志); - 缩小范围:先通过
sed按时间筛选日志,再用grep查关键词,效率更高; - 统计分析:
grep "错误" 日志 | sort | uniq -c | sort -nr(找高频问题)。