831 字
4 分钟
这是一个速度测试
Linux文本处理三剑客详解:grep、sed、awk终极指南

本文已同步发布于【技术博客名称】・ 最后更新:2024年6月 适用系统:Linux/macOS/WSL 测试环境:GNU grep 3.7 / sed 4.8 / awk 5.1.0
一、文本处理三剑客全景概览
| 工具 | 核心能力 | 处理模式 | 复杂度 | 典型场景 |
|---|---|---|---|---|
| grep | 模式匹配与过滤 | 行级过滤 | ★★☆ | 日志搜索、错误定位 |
| sed | 流式文本编辑 | 行级处理 | ★★★ | 批量替换、文本变形 |
| awk | 结构化数据处理 | 列级处理 | ★★★★ | 报表生成、数据统计 |
黄金组合原则: grep快速过滤 → sed清洗变形 → awk分析输出
二、grep:模式匹配大师
2.1 基础语法
grep [选项] '模式' 文件列表2.2 核心选项速查
| 选项 | 功能描述 | 示例 |
|---|---|---|
| -i | 忽略大小写 | grep -i 'error' log.txt |
| -v | 反向匹配 | grep -v 'debug' *.log |
| -r | 递归搜索目录 | grep -r 'TODO' src/ |
| -E | 启用扩展正则表达式 | grep -E '^[A-Z]{3}' data |
| -C 3 | 显示匹配行前后3行 | grep -C3 'panic' trace |
2.3 高级技巧
多模式匹配
grep -e 'error' -e 'warning' system.log正则表达式实战
# 匹配IPv4地址
grep -Eo '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)' access.log三、sed:流编辑器深度解析
3.1 命令结构
sed [选项] '指令' 输入文件3.2 常用指令集
| 指令 | 功能描述 | 示例 |
|---|---|---|
| s | 替换 | sed 's/old/new/g' file |
| d | 删除行 | sed '/^#/d' config |
| p | 打印 | sed -n '/error/p' log |
| i | 插入行 | sed '2i INSERT_TEXT' file |
3.3 高级应用
批量修改文件
# 备份原文件并执行替换
sed -i.bak 's/foo/bar/g' *.txt多命令脚本
# cleanup.sed
/^$/d # 删除空行
s/[[:space:]]\+$// # 去除行尾空格
1,5s/^/# / # 注释前5行四、awk:数据加工瑞士军刀
4.1 程序结构
awk 'BEGIN{初始化} 模式{动作} END{收尾}' 文件4.2 内建变量
| 变量 | 描述 | 示例 |
|---|---|---|
| NR | 当前记录数 | awk '{print NR,$0}' |
| NF | 当前字段数 | awk '{print $NF}' |
| FS | 字段分隔符(默认空格) | awk -F: '{print $1}' |
4.3 典型应用场景
数据统计
# 统计HTTP状态码
awk '{count[$9]++} END {for(code in count) print code, count[code]}' access.log字段重组
# 生成CSV报表
awk -F, 'BEGIN{OFS=";"} {print $1,$3,$NF}' data.csv五、三剑客联合实战
案例:Nginx日志分析
# 分析访问量TOP10的IP
grep 'GET /api' access.log | \
sed 's/ - - / /' | \
awk '{ip_count[$1]++} END {for(ip in ip_count) print ip_count[ip], ip}' | \
sort -nr | head -10处理流程分解:
grep筛选API请求sed清洗多余字符awk统计IP频率- 排序输出TOP10
六、避坑指南
6.1 常见陷阱
- 贪婪匹配:
.*可能匹配过多内容,使用.*?限定范围 - 特殊字符:记得转义
$、\等符号 - 性能优化:大文件优先使用
grep过滤再管道传递
6.2 调试技巧
sed -n l:显示隐藏字符awk 'NR==10 {print; exit}':快速检查第10行grep --color=always:高亮显示匹配结果
七、延伸学习资源
官方文档: GNU Grep手册 Sed手册 Awk编程语言
推荐书籍: 《Sed and Awk 101 Hacks》 《Linux命令行与Shell脚本编程大全》
原创声明:本文采用 CC BY-NC-SA 4.0 协议授权 技术讨论可访问:博客评论区 | GitHub Issues
{% comment %}
注意:实际使用时需替换以下内容:
1. 封面图URL
2. 博客名称和链接
3. 评论区/讨论区链接
4. 根据实际测试环境更新版本号
{% endcomment %}