区别
一句话总结:sed 擅长「行替换/文本流编辑」;awk 擅长「按字段拆分、数据计算、格式化输出」
sed
以行为单位处理文本,核心是修改文本内容
- 定位:按行匹配(正则匹配整行)
- 核心能力:增删改查行、替换字符串、行移动
s/old/new/g字符串替换(最常用)- d 删除行、a追加、i插入、p打印行
- 适用场景:
- 批量替换文件内容
- 删除/保留符合条件的行
- 简单文本预处理
- 短板:对列/字段处理弱,计算能力很差,不方便拆分多列数据
示例:把文件里所有abc替换成xyz
sed 's/abc/xyz/g' test.txt
awk
是小型编程语言,默认按行读取,再按分隔符拆成字段($1 $2 $3...),核心是提取数据、做计算
- 定位:**行 + 列(字段)**,默认空白分割字段
- 核心能力:
- 提取某一列、多列输出
- 条件判断、循环、数值运算、统计求和、格式化打印
BEGIN{}前置逻辑,END{}汇总输出
- 适用场景:
- 日志提取某几列(如ip、响应时间)
- 统计总和、平均值、计数
- 结构化文本(表格类文本)筛选
- 短板:不适合大量原地字符串替换,做全局替换不如sed简洁
示例:打印文件第2、第3列
awk '{print $2,$3}' test.txt
区别对比表
| 项目 | sed | awk |
|---|---|---|
| 定位 | 行编辑器 | 字段/数据处理语言 |
| 处理单位 | 一行 | 一行 → 拆成多个字段 |
| 强项 | 替换、增删行,文本修改 | 列提取、统计、运算、格式化 |
| 编程能力 | 极弱,只有简单分支 | 完整变量、判断、循环、数学计算 |
| 典型用途 | 修改文本内容 | 分析、提取、统计数据 |
应用场景
- ✅ 只做替换、删行 → sed
- ✅ 需要拿某几列、求和、判断 → awk
- 复杂场景经常两者配合管道使用
# 先用sed过滤行,再用awk提取第3列
sed '/error/p' log.txt | awk '{print $3}'
补充
- sed:默认不会直接改源文件,加
-i参数才原地修改 - awk:主要是读取并输出,一般不直接修改原文件