Linux 文本处理三剑客:awk 和 sed 区别

区别

一句话总结:sed 擅长「行替换/文本流编辑」;awk 擅长「按字段拆分、数据计算、格式化输出」

sed

以行为单位处理文本,核心是修改文本内容

  1. 定位:按行匹配(正则匹配整行)
  2. 核心能力:增删改查行、替换字符串、行移动
    • s/old/new/g 字符串替换(最常用)
    • d 删除行、a追加、i插入、p打印行
  3. 适用场景:
    • 批量替换文件内容
    • 删除/保留符合条件的行
    • 简单文本预处理
  4. 短板:​对列/字段处理弱,计算能力很差​,不方便拆分多列数据

示例:把文件里所有abc替换成xyz

sed 's/abc/xyz/g' test.txt

awk

是​小型编程语言​,默认按​行读取,再按分隔符拆成字段​($1 $2 $3...),核心是提取数据、做计算

  1. 定位:​**行 + 列(字段)**​,默认空白分割字段
  2. 核心能力:
    • 提取某一列、多列输出
    • 条件判断、循环、数值运算、统计求和、格式化打印
    • BEGIN{}前置逻辑,END{}汇总输出
  3. 适用场景:
    • 日志提取某几列(如ip、响应时间)
    • 统计总和、平均值、计数
    • 结构化文本(表格类文本)筛选
  4. 短板:​不适合大量原地字符串替换​,做全局替换不如sed简洁

示例:打印文件第2、第3列

awk '{print $2,$3}' test.txt

区别对比表

项目 sed awk
定位 行编辑器 字段/数据处理语言
处理单位 一行 一行 → 拆成多个字段
强项 替换、增删行,文本修改 列提取、统计、运算、格式化
编程能力 极弱,只有简单分支 完整变量、判断、循环、数学计算
典型用途 修改文本内容 分析、提取、统计数据

应用场景

  1. ✅ 只做替换、删行 → sed
  2. ✅ 需要拿某几列、求和、判断 → awk
  3. 复杂场景经常两者配合管道使用
# 先用sed过滤行,再用awk提取第3列
sed '/error/p' log.txt | awk '{print $3}'

补充

  • sed:默认​不会直接改源文件​,加 -i 参数才原地修改
  • awk:主要是​读取并输出​,一般不直接修改原文件

原文出处:/show_1GW42gyYJ5Bc.html