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 下的数据处理流水线。先想清楚「取哪列、按什么过滤、怎么聚合」,再选工具。