831 字
4 分钟
这是一个速度测试
2025-03-29

Linux文本处理三剑客详解:grep、sed、awk终极指南#

Linux三剑客封面图

本文已同步发布于【技术博客名称】・ 最后更新: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

处理流程分解

  1. grep筛选API请求
  2. sed清洗多余字符
  3. awk统计IP频率
  4. 排序输出TOP10

六、避坑指南#

6.1 常见陷阱#

  • 贪婪匹配.*可能匹配过多内容,使用.*?限定范围
  • 特殊字符:记得转义$\等符号
  • 性能优化:大文件优先使用grep过滤再管道传递

6.2 调试技巧#

  • sed -n l:显示隐藏字符
  • awk 'NR==10 {print; exit}':快速检查第10行
  • grep --color=always:高亮显示匹配结果

七、延伸学习资源#

原创声明:本文采用 CC BY-NC-SA 4.0 协议授权 技术讨论可访问:博客评论区 | GitHub Issues

{% comment %}
注意:实际使用时需替换以下内容:
1. 封面图URL
2. 博客名称和链接
3. 评论区/讨论区链接
4. 根据实际测试环境更新版本号
{% endcomment %}
这是一个速度测试
https://blog.050413.xyz/posts/test/
作者
Jiwoo
发布于
2025-03-29
许可协议
CC BY-NC-SA 4.0