Linux 文本三剑客:grep、sed、awk 入门实战
【摘要】 在 Linux 服务器上排查问题时,grep、sed、awk 被称为「文本三剑客」:grep 负责找、sed 负责改、awk 负责算。本文通过实战命令带你入门三者的常用用法与管道组合技巧。
在 Linux 服务器上排查问题时,日志文件动不动就几百 MB,靠肉眼翻根本不现实。grep、sed、awk 被称为「文本三剑客」,几乎是每个运维和开发者排查问题的标配。三者分工明确:grep 负责找,sed 负责改,awk 负责算。
grep:按行找内容
最常用的就是在日志里定位关键字:
grep "ERROR" app.log # 找出含 ERROR 的行
grep -i "timeout" app.log # 忽略大小写
grep -rn "password" /etc/nginx # 递归目录并显示行号
grep -A5 -B5 "Exception" app.log # 显示匹配行前后各 5 行
-A、-B、-C 这三个参数在排查线上故障时特别有用,上下文信息往往比报错本身更重要。
sed:按行改文本
sed 是流编辑器,最常见的用法是批量替换:
sed -i 's/localhost/127.0.0.1/g' config.properties # 直接修改文件
sed -n '10,20p' app.log # 只打印 10~20 行
sed '/^$/d' file.txt # 删除空行
注意 -i 会直接改原文件,操作前最好先备份。替换分隔符不一定非用 /,路径替换时用 # 可读性更好:sed -i 's#/usr/local#/opt#g' file。
awk:按列算数据
awk 把每一行按空格或指定分隔符拆成字段,适合处理结构化文本:
awk '{print $1, $4}' access.log # 打印第 1 列和第 4 列
awk -F',' '{print $2}' data.csv # 按逗号分隔
awk '$3 > 500 {print $0}' app.log # 第三列大于 500 的行
awk '{sum+=$5} END {print sum}' log # 对第 5 列求和
统计接口耗时、分析 Nginx 访问日志的 PV/UV,一个 awk 命令就能搞定。
组合实战
三剑客真正的威力在于管道组合。例如从 Nginx 日志里找出响应最慢的 5 个请求:
grep "2026-10-22" access.log | awk '{print $7, $10}' | sort -rn -k2 | head -5
先 grep 过滤日期,再 awk 取出请求路径和耗时,sort 按耗时降序,最后 head 取前 5。这一行命令,顶得上写一个小脚本。
掌握这三个工具,日常排查效率至少翻倍。建议从 grep 开始,熟练后再逐个加上 sed 和 awk,慢慢形成自己的命令组合库。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)