当前位置:首页>Linux>Linux基础|文本处理三剑客grep/sed/awk协同的威力

Linux基础|文本处理三剑客grep/sed/awk协同的威力

  • 2026-08-14 00:58:44
Linux基础|文本处理三剑客grep/sed/awk协同的威力
在前面的文章中,我们已经分别介绍过grep、sed、awk以及管道的用法。
不了解的可以可以看这里
Linux基础|grep: 文本查找的第一利器
Linux入门必学:sed 命令其实没你想的那么难
Awk:Linux文本处理的瑞士军刀
Linux基础|管道:把命令真正“连”起来

很多读者也都会用:grep 查内容、sed 改文本、awk 拆字段。但真正拉开水平差距的,并不是“会不会某一个命令”,而是:你能不能把它们组合起来解决真实问题。grep、sed、awk 被称为 Linux 文本处理“三剑客”,不是因为它们各自有多强,而是因为它们天生就该配合使用。

一、为什么要组合使用三剑客?

先看一个典型场景:

从日志中找出error级别的记录,去掉无关字段,统计每天的错误次数。

单靠一个命令,很难优雅完成,但如果拆解任务,就会发现非常清晰:
  1. grep:筛选目标行
  2. sed:清洗或替换内容
  3. awk:提取字段、统计结果
这正是 Linux 命令行的核心思想:一个命令只做一件事,通过管道组合完成复杂任务。

二、示例日志准备

假设有一份日志 app.log,格式如下:
2024-06-01 INFO user login success2024-06-01 ERROR db connect failed2024-06-02 ERROR timeout2024-06-02 INFO task finished......
我们的目标是:统计每天 ERROR 出现的次数

三、第一步:grep 负责“筛选目标”

先把 ERROR 行筛选出来:
grep "ERROR" app.log
输出结果只保留了关键信息,后续命令处理压力大大降低。

四、第二步:sed 负责“清洗和修饰”

如果日志中包含多余信息,比如多余空格,我们可以先处理:
grep "ERROR" app.log | sed 's/ERROR//'
sed 不关心结构,只做“文本层面的修改”,非常适合放在中间。

五、第三步:awk 负责“分析和统计”

现在用 awk 提取日期并统计次数:
grep "ERROR" app.log | awk '{count[$1]++} END {for (d in count) print d, count[d]}'
输出示例:
2024-06-01 12024-06-02 1
awk 在三剑客中,负责逻辑和计算

六、一个更贴近运维的实战案例

场景:统计当前系统中 nginx 进程数量
ps -ef | grep nginx | grep -v grep | awk '{print $2}' | wc -l
分解来看:
ps -ef           # 获取进程列表grep nginx       # 筛选目标进程grep -v grep     # 排除自身awk '{print $2}' # 提取 PIDwc -l            # 统计数量
这类写法,在脚本和运维排查中极其常见。

七、三剑客的“分工协作模型”

可以简单记住一条经验法则:

grep:找谁

sed:怎么改

awk:怎么算

当你遇到文本处理需求时,先想清楚三件事:

要不要过滤?

要不要修改?

要不要统计?

然后按顺序组合命令。

八、使用三剑客的几个实用建议

✅ 1. 先拆需求,再写命令
不要一上来就憋“长命令”,先拆成几步。
✅ 2. 多用管道,少用临时文件
管道让数据流转更自然,也更高效。
✅ 3. 可读性比“炫技”更重要
命令是写给人看的,不只是给机器执行的。

九、写在最后

grep、sed、awk 各自并不复杂,但组合起来,威力极大。当你开始习惯用“三剑客”处理日志、分析数据、写脚本时,说明你已经真正理解了 Linux 文本处理的精髓: 

工具不在多,在于用得顺;

命令不在长,在于思路清。

如果你愿意多练几次,你会发现:很多问题,其实一行命令就能解决。
关注我,更多linux使用技巧和你一起探讨!

最新文章

随机文章