Linux 文本三剑客:grep、sed、awk 入门实战

举报
yd_290169684 发表于 2026/10/22 09:35:03 2026/10/22
【摘要】 在 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)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。