Linux 文本处理三剑客:grep、sed、awk
站长发布于 2026/09/03更新于 2026/09/171460 次阅读
grep:找
grep -rn "ERROR" /var/log/app/ # 递归 + 行号
grep -i "timeout" access.log # 忽略大小写
grep -E "50[0-4]" nginx.log # 正则匹配 500-504
grep -c "GET /api" access.log # 统计行数
sed:改
sed -i 's/Port 80/Port 8080/' httpd.conf # 原地替换
sed -n '10,20p' app.log # 打印 10-20 行
sed '/^$/d' config.txt # 删除空行
sed 's/[[:space:]]*$//' file # 去行尾空白
awk:算
# 统计 Nginx 日志每个 IP 的访问次数(Top 10)
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head
# 求第二列的平均值
awk '{sum+=$2} END {print sum/NR}' data.txt
# 条件过滤:状态码非 200 的行
awk '$9 != 200 {print $0}' access.log
组合拳:快速定位线上问题
# 1. 最近的错误日志
journalctl -u myapp --since "10 min ago" | grep -i error
# 2. 谁在疯狂请求
netstat -antp | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn
# 3. 大文件排行
du -ah /var | sort -rh | head -20
小结
三剑客 + 管道 + sort/uniq/cut,构成了 Linux 下的数据处理流水线。先想清楚「取哪列、按什么过滤、怎么聚合」,再选工具。