Linux 三剑客:sed、awk、grep 终极详解(原理+实战+底层逻辑)——运维必会文本处理全攻略!
·
本文将用通俗易懂 + 底层原理 + 实战示例 + 场景应用的方式,从零开始带你彻底掌握这三大核心命令:
-
grep:文本过滤王者
-
sed:流式编辑专家
-
awk:文本分析大师
无论你是小白入门,还是想进阶成为 Linux 运维高手,这篇文章都会帮你构建完整知识体系。建议收藏 + 反复实践。
一、Linux 文本处理核心思想
在 Linux 中:
一切皆文件
日志是文本
配置是文本
监控数据是文本
而 sed、awk、grep 就是处理文本的三把“手术刀”。
它们三者定位不同:
| 命令 | 核心能力 | 适合场景 |
|---|---|---|
| grep | 查找 | 过滤日志 |
| sed | 修改 | 批量替换 |
| awk | 分析 | 统计计算 |
二、grep —— 文本过滤王者
1️⃣ 工作原理
grep 的核心机制:
读取文件 → 按行扫描 → 匹配正则 → 输出符合行
本质就是“模式匹配引擎”。
2️⃣ 基础用法
grep "error" logfile.log
查找包含 error 的行。
3️⃣ 常用参数详解
| 参数 | 作用 |
|---|---|
| -i | 忽略大小写 |
| -v | 取反 |
| -n | 显示行号 |
| -r | 递归查找 |
| -E | 使用扩展正则 |
示例:
grep -in "failed" /var/log/messages
4️⃣ 正则表达式核心
| 表达式 | 含义 |
|---|---|
| ^ | 行首 |
| $ | 行尾 |
| . | 任意字符 |
| * | 0次或多次 |
| [] | 字符集合 |
示例:
grep "^root" /etc/passwd
查找以 root 开头的行。
5️⃣ 实战场景
🔥 查找80端口进程
netstat -ntlp | grep 80
🔥 统计日志报错次数
grep -c "ERROR" app.log
三、sed —— 流编辑专家
1️⃣ 工作原理
sed 是 Stream Editor(流编辑器)。
工作流程:
读取一行 → 放入模式空间 → 执行命令 → 输出 → 读取下一行
特点:
-
不加载全部文件
-
按行处理
-
内存占用极低
2️⃣ 核心语法结构
sed [选项] '命令' 文件
3️⃣ 最核心命令:替换
sed 's/旧内容/新内容/' 文件
示例:
sed 's/root/admin/' passwd.txt
只替换每行第一个。
全局替换:
sed 's/root/admin/g' passwd.txt
4️⃣ 行操作
删除第2行:
sed '2d' file.txt
删除第2到5行:
sed '2,5d' file.txt
只打印第3行:
sed -n '3p' file.txt
5️⃣ 实战应用
🔥 批量修改IP
sed -i 's/192.168.1.10/10.0.0.1/g' config.conf
🔥 删除空行
sed '/^$/d' file.txt
四、awk —— 文本分析大师
1️⃣ 工作原理
awk 本质是“文本处理编程语言”。
核心思想:
按行读取 → 按列分割 → 条件匹配 → 执行动作
默认分隔符是空格。
2️⃣ 核心结构
awk '条件 {动作}' 文件
3️⃣ 内置变量
| 变量 | 含义 |
|---|---|
| $0 | 整行 |
| $1 | 第一列 |
| $2 | 第二列 |
| NF | 列数 |
| NR | 行号 |
4️⃣ 基础示例
打印第一列:
awk '{print $1}' file.txt
打印第1和第3列:
awk '{print $1,$3}' file.txt
5️⃣ 条件判断
打印端口为 80 的行:
awk '$3==80 {print $0}' file.txt
6️⃣ 统计计算
统计CPU使用率平均值:
awk '{sum+=$2} END {print sum/NR}' cpu.txt
7️⃣ 实战案例
🔥 统计每个IP访问次数
awk '{print $1}' access.log | sort | uniq -c | sort -nr
五、三剑客对比总结
| 功能 | grep | sed | awk |
|---|---|---|---|
| 查找 | ⭐⭐⭐⭐ | ⭐ | ⭐ |
| 替换 | ⭐ | ⭐⭐⭐⭐ | ⭐ |
| 分析 | ⭐ | ⭐ | ⭐⭐⭐⭐ |
| 复杂逻辑 | ❌ | ⭐ | ⭐⭐⭐⭐ |
六、高手进阶:三剑客组合拳
Linux 精髓在于“管道思想”。
示例:
cat access.log | grep "404" | awk '{print $1}' | sort | uniq -c | sort -nr
解释:
-
过滤404
-
取IP
-
排序
-
统计
-
倒序排列
这就是运维日常数据分析流程。
七、底层理论提升(面试必问)
Q1:为什么 sed 比 awk 快?
答:
-
sed 是纯流编辑
-
awk 是解释执行脚本
-
awk 功能更强但开销更大
Q2:grep 和 egrep 区别?
-
egrep 等同于 grep -E
-
支持扩展正则
Q3:为什么 awk 默认空格分割?
因为其设计目标是处理结构化文本(类似表格)。
八、运维实战场景合集
✅ 日志分析
✅ 批量修改配置
✅ 数据提取
✅ 统计分析
✅ 自动化脚本
这三剑客,构成 Linux 文本处理的核心体系。
九、学习建议
-
每天练习 5 个日志案例
-
多用 man 查看参数
-
学会正则表达式
-
熟悉管道组合
总结
grep 是筛子
sed 是剪刀
awk 是计算器
如果你掌握了这三把武器,你在 Linux 世界里基本可以横着走。


所有评论(0)