文本处理三剑客:cut、awk、sed 高阶用法示例


一、引言

在软件开发、测试及运维中,文本处理无处不在。从日志解析、数据清洗,到配置文件批量修改,文本处理的效率直接影响工作效率和质量。在Unix/Linux世界里,cutawksed 三个工具,被称为“文本处理三剑客”,各自具备强大功能,也能协同发挥无穷威力。

本篇文章将基于实际应用场景,深度剖析三者的高阶用法,解读背后的原理与设计思路,帮助你迈入文本处理高手之列。


二、cut

cut 是一个快速且高效的命令,专注于按列或字符截取文本。它非常适合处理结构简单的定界文本文件。

示例:

1. 按多列抽取,保持列顺序灵活
cut -d ',' -f 3,1,5 data.csv
  • 使用逗号分隔符,提取第3、第1和第5列

  • 输出列顺序按参数顺序排列,灵活调整字段顺序

2. 结合管道过滤并提取字段
ps aux | grep java | grep -v grep | cut -d ' ' -f 1,2,11
  • 先过滤进程,再提取用户、PID、命令字段

Tips: cut 以固定分隔符为前提,适合字段清晰的文本,复杂格式推荐使用awk


三、awk

awk 不仅是命令,更是一门迷你编程语言。它以行为单位,按字段分割,可执行复杂逻辑,支持变量、条件、循环等。

示例:

1. 计算文件中某列的加权平均值

假设grades.txt内容如下:

Alice  85  0.3
Bob    90  0.4
Carol  75  0.3

计算加权平均:

awk '{sum += $2 * $3; wsum += $3} END {print "Weighted Average:", sum/wsum}' grades.txt
  • $2为成绩,$3为权重

  • END块在处理完所有行后输出结果

2. 按字段排序并输出格式化表格
awk '{print $2, $1}' users.txt | sort -nr | awk '{printf "%-10s %s\n", $2, $1}'
  • 交换字段,排序(数值降序)

  • 格式化输出列宽

3. 多条件过滤
awk '$3 > 80 && $4 == "Passed" {print $1, $3}' results.txt
  • 只输出分数大于80且状态为Passed的姓名和分数

4. 正则匹配字段内容
awk '$0 ~ /ERROR|WARN/ {print NR, $0}' logfile.log
  • 输出包含“ERROR”或“WARN”的行号及内容


四、sed

sed 主要用于行文本替换、删除、插入及复杂流编辑,善于批量自动化改写。

示例:

1. 批量替换多文件中的配置项

将配置文件中所有timeout=30改为timeout=60

sed -i 's/timeout=30/timeout=60/g' *.conf
  • -i原地替换

  • g全局替换行内所有匹配

2. 删除日志中某时间段记录

假设日志中每行以时间戳开头,格式YYYY-MM-DD HH:MM:SS,删除10点到11点的记录:

sed '/^2025-06-26 10:/d' app.log
3. 多行模式编辑——合并多行

将以反斜杠\结尾的行与下一行合并:

sed ':a; /\\$/ { N; s/\\\n//; ba }' file.txt
  • :a定义标签,ba跳转循环,反复处理多行合并

4. 插入行

在匹配模式前插入一行:

sed '/^ERROR/i\### ERROR DETECTED ###' app.log

五、三剑客组协同发挥更大威力

示例:提取 nginx 访问日志中状态码为 500 的 IP 列表

grep " 500 " access.log | awk '{print $1}' | sort | uniq -c | sort -nr
  • grep快速过滤

  • awk抽取第一列(IP)

  • sort | uniq -c统计频率

  • 结果按访问次数降序

示例:批量替换日志中日期格式

sed -r 's/([0-9]{4})\/([0-9]{2})\/([0-9]{2})/\1-\2-\3/g' logfile.log | cut -d ' ' -f 1-5
  • sedYYYY/MM/DD格式改为YYYY-MM-DD

  • cut提取前五字段简化输出


六、实用技巧与性能优化建议

  • 避免使用过多管道,复杂逻辑优先用awk实现,减少进程创建开销。

  • 使用 sed -rawk 的扩展正则,提高匹配效率。

  • 文本量巨大时,使用 LC_ALL=C 环境变量提高处理速度。

  • 结合xargsparallel并行处理多个文件,提升吞吐。

  • 充分利用awk的变量和条件判断,实现智能文本分析。


七、总结

cutawksed作为经典文本处理工具,各有千秋。它们从简洁的字段提取,到复杂的文本替换与逻辑判断,构成了Unix文本处理的坚实基石。

  • cut:轻量快速,适合定界简单字段抽取

  • awk:逻辑强大,适合复杂计算与条件过滤

  • sed:文本流编辑,擅长自动化替换与批量修改

掌握它们的高阶用法,能显著提升文本数据的处理效率和质量,使你在开发、测试、运维乃至数据分析中如虎添翼。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试者家园

你的认同,是我深夜码字的光!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值