Linux 文本处理三剑客:grep、sed、awk 入门

举报
yd_278701352 发表于 2026/11/10 01:52:34 2026/11/10
【摘要】 在 Linux 服务器上排查问题,十有八九要和日志文件打交道。日志动辄几万行,靠肉眼翻是不现实的。grep、sed、awk 这三个工具被称为文本处理三剑客,分工明确:grep 负责找,sed 负责改,awk 负责算。掌握它们,查日志的效率能翻几倍。 一、grep:先把相关的行找出来grep 是最常用的筛选工具,基本用法是在文件里找包含某个关键词的行:grep "error" app.log只...

在 Linux 服务器上排查问题,十有八九要和日志文件打交道。日志动辄几万行,靠肉眼翻是不现实的。grep、sed、awk 这三个工具被称为文本处理三剑客,分工明确:grep 负责找,sed 负责改,awk 负责算。掌握它们,查日志的效率能翻几倍。

一、grep:先把相关的行找出来

grep 是最常用的筛选工具,基本用法是在文件里找包含某个关键词的行:

grep "error" app.log

只看包含 error 的行,日志一下子就变薄了。几个日常高频选项值得记住:

  • -i 忽略大小写:grep -i "error" app.log,大小写混写的报错也不会漏掉
  • -n 显示行号:grep -n "error" app.log,定位到具体行再用编辑器打开
  • -v 反向筛选:grep -v "healthcheck" app.log,把无意义的心跳日志先排除
  • -c 只统计数量:grep -c "timeout" app.log,先看报错有多少再决定要不要深挖
  • -r 递归查目录:grep -r "password" /etc/nginx/,在整个目录里找配置

组合起来用效果更好。比如先排除干扰、再看真正的报错:

grep -v "healthcheck" app.log | grep -i "error"

二、sed:不用打开文件就能改内容

sed 是流编辑器,最常见的用法是替换文本。把配置文件里一个值批量改掉,不用逐个打开文件:

sed -i 's/8080/9090/g' app.conf

这里 -i 表示直接改文件,s/8080/9090/g 的意思是把每一行的 8080 都换成 9090,g 代表整行全部替换,不加 g 只换每行第一个。

不加 -i 时 sed 只把结果输出到屏幕、不动原文件,改之前先这样预览一次是个好习惯:

sed 's/8080/9090/g' app.conf

除了替换,sed 还能按行号删行、取行。删掉文件前 10 行注释、只看正文:

sed -n '11,20p' app.log

这行命令只打印第 11 到第 20 行,配合管道可以快速截取日志的某一段。

三、awk:按列处理,做统计

日志常常是按列排的,比如访问日志里每一行都有 IP、时间、状态码。awk 按列切分,一行命令就能做统计:

awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -5

这条命令做了五件事:取每行第一列(IP)、排序、去重计数、按次数倒序、取前五名。结果就是访问量最高的五个 IP,一眼看出有没有异常流量。

再比如统计各种状态码各出现了多少次:

awk '{print $9}' access.log | sort | uniq -c

状态码在第九列,$9 就是取第九列。200 有多少、404 有多少、500 有多少,一行命令全出来了,比写脚本快得多。

四、三剑客怎么配合

实际排查很少只用一个工具,典型流程是三步走:

  1. grep 先筛出含关键词的行,缩小范围
  2. sed 按行号截取可疑时间段
  3. awk 按列统计,找出规律

比如接口突然变慢,先找慢请求:

grep "slow" app.log | awk '{print $4}' | sort | uniq -c

先筛出慢请求,再按第四列(接口名)统计,哪个接口慢得最多立刻现形。定位到接口之后,再用 sed 截取对应时间段的完整日志交给开发。

五、几个新手容易踩的坑

  • sed -i 会直接改文件,改重要配置前先备份一份,cp app.conf app.conf.bak 再动手
  • grep 默认是区分大小写的,查报错记得加 -i,不然 Error 和 error 会漏一半
  • awk 的列号从 1 开始,$0 代表整行,别把 $1 和第一列搞混
  • 管道接得越长越要分段验证,每接一段先看一眼输出对不对,再往下接

小结

grep 找行、sed 改行、awk 按列统计。三个工具都不难,难的是养成组合使用的习惯:先筛、再截、后统计。日志排查的大部分工作,一条管道命令就能完成。下次服务器出问题,别急着翻文件,先想想哪条管道能把答案直接算出来。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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