文本分析三剑客:sed/awk/grep 全景解析
一、前世今生与技术定位
■ grep:诞生于1974年UNIX V5系统[1,4](@ref),源自ed编辑器中的”g/re/p”(全局正则表达式打印)操作,成为首个正则表达式搜索工具
■ sed:1977年由Lee E. McMahon开发[4](@ref),基于ed编辑器思想实现流式编辑,适合非交互式批量文本修改
■ awk:1977年由Alfred Aho、Peter Weinberger和Brian Kernighan开发[6,8](@ref),首创基于数据字段的编程模型,成为结构化数据处理标杆
二、核心功能与基础用法对比
工具 | 核心能力 | 典型命令示例 |
---|---|---|
grep | 模式匹配/行级过滤 | grep -iRn "error" *.log |
sed | 流式文本编辑 | sed 's/old/new/g; 5d' file |
awk | 字段处理/统计计算 | awk '{sum+=$3} END{print sum}' data |
三、高阶技巧与组合应用
1. grep进阶能力
■ 上下文控制:grep -C3 "panic"
显示匹配前后3行[9](@ref)
■ 多模式匹配:grep -E "error|warning"
支持扩展正则[10](@ref)
■ 二进制处理:grep -a "text" binary
强制解析二进制文件[9](@ref)
2. sed黑魔法
■ 多行处理:sed 'N; s/\n//'
合并相邻行[1](@ref)
■ 条件分支:/start/,/end/ s/old/new/
范围替换[4](@ref)
■ 模式空间交换:h;n;G
实现行重排序[1](@ref)
3. awk编程范式
■ 多维数组:awk '{cnt[$1]++} END{for(k in cnt) print k,cnt[k]}'
分组统计[7](@ref)
■ 数学计算:awk 'BEGIN{print log(10)}'
内置数学函数[8](@ref)
■ 网络通信:awk '/GET/ {print | "curl -X POST"}'
管道调用外部命令[6](@ref)
四、现代衍生产品
1. 性能增强版
■ ack/ag/rg:支持.gitignore的快速递归搜索工具(基于grep思想)[9](@ref)
■ jq:JSON专用处理工具(awk的领域特化版)
2. 语言扩展版
■ perl:整合三剑客功能的全能脚本语言
■ miller:支持CSV/JSON的现代数据工具(awk精神延续)
黄金组合技巧:
1. 日志分析流水线:grep "ERROR" | sed 's/.*\[//' | awk '{print $1}' | sort | uniq -c
[10](@ref)
2. 数据清洗三板斧:grep过滤无效行 → sed修正格式 → awk生成统计报表[8](@ref)
3. 正则表达式最佳实践:优先使用PCRE标准(grep -P
)处理复杂模式[9](@ref)
引用说明
[1](@ref) sed命令详解(吴易娃)
[4](@ref) sed原理与高级用法(Linux社区)
[6](@ref) awk编程指南(开发者社区)
[7](@ref) awk高级技巧(技术博客)
[8](@ref) grep实战手册(Worktile)
[9](@ref) grep高级教程(开发者指南)
[10](@ref) 三剑客组合应用(技术总结)