Linux 日志分析靠 grep、awk、sed 精准组合:grep 筛选错误 / 警告等关键词并显示上下文,awk 按时间戳提取日志片段并统计 IP、状态码等字段,sed 清洗格式、脱敏敏感信息,三者协同实现高效结构化分析。

Linux 系统日志分析不靠猜,靠精准匹配和结构化提取。掌握 grep、awk、sed 这三个核心 工具 的组合用法,能快速从海量日志中定位异常、统计趋势、提取关键字段。
快速定位错误和警告信息
系统日志(如 /var/log/syslog 或/var/log/messages)里混杂大量信息,优先抓出高价值线索:
- 用
grep -i "error|warning|fail|denied"不区分大小写筛选典型关键词 - 加
-C 2显示上下文(前后两行),便于看清报错前后的操作或服务状态 - 配合
tail -f /var/log/secure | grep "Failed password"实时监控 SSH 暴力破解尝试
按时间范围提取日志片段
日志首字段通常是时间戳,但格式不统一(如 Oct 12 14:23:01 或2024-10-12T14:23:01+08:00)。用 awk 灵活处理:
- 提取今天的所有
nginx访问日志:awk '$4 ~ /[.*$(date +%d/%b/%Y)/ {print}' /var/log/nginx/access.log - 筛选某小时内的记录(假设时间在第 4 字段):
awk '$4 ~ /^[12/Oct/2024:14:/ {print}' access.log - 用
sed -n '/Oct 12 14:00:/, /Oct 12 15:00:/ p' syslog截取时间段(适合标准 syslog 格式)
提取并统计关键字段(IP、状态码、URL)
Nginx 或 Apache 日志结构清晰,awk是字段提取主力:
- 统计访问最多的 IP:
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10 - 查看 HTTP 状态码分布:
awk '{print $9}' access.log | sort | uniq -c | sort -nr - 提取返回 500 错误 的完整 URL:
awk '$9 =="500"{print $7}' access.log | sort -u
清洗与重构日志内容
原始日志常含冗余字符或需格式标准化,sed擅长做“文本手术”:
- 去掉日志中的方括号(如
[error]→error):sed 's/[//g; s/]//g' - 把多空格替换成单逗号,方便导入 CSV:
sed 's/[[:space:]]+/","/g; s/^","//; s/","$//' - 脱敏处理敏感 IP(如将
192.168.1.100替换为192.168.1.XXX):sed 's/192.168.1.[0-9]+/192.168.1.XXX/g'
实际分析时,三者常嵌套使用:先用 grep 缩小范围,再用 awk 切字段,最后用 sed 整理输出。不必死记命令,理解每条工具的核心能力——grep是“找”,awk是“切和算”,sed是“改”——组合起来就是日志分析的最小高效闭环。






























