文本处理是 Shell 脚本最擅长的事情之一。Linux 系统中几乎所有的配置文件、日志文件、数据文件都是文本格式,掌握文本处理工具,就等于掌握了系统管理的钥匙。
Linux 的设计哲学之一就是"一切皆文件"。系统的配置信息存放在文本文件中,程序的输出是文本,日志记录也是文本。日常工作中,我们需要从海量日志中查找错误、从配置文件中提取参数、对数据进行统计分析,这些都离不开文本处理。
Shell 提供了一系列强大的文本处理工具,它们遵循 Unix 哲学:每个工具只做一件事,做好一件事,然后通过管道组合起来解决复杂问题。
grep:文本搜索利器。能在文件中快速查找匹配的行,支持正则表达式,是日志分析、代码搜索的必备工具。
sed:流编辑器。可以对文本进行替换、删除、插入等操作,特别适合批量修改文件内容。
awk:文本处理语言。功能强大,可以按列处理数据、进行计算、生成报表,是数据处理的瑞士军刀。
cut:文本切割工具。按字符、字节或字段提取文本的特定部分,简单直接。
sort:排序工具。可以对文本行进行排序,支持数字排序、逆序、按字段排序等。
uniq:去重工具。去除相邻的重复行,常与 sort 配合使用。
tr:字符转换工具。可以进行字符替换、删除、压缩,适合简单的字符处理。
面对一个文本处理任务,如何选择合适的工具?
查找匹配的行:用 grep。比如从日志中找错误信息,从代码中找函数定义。
替换文本内容:简单的替换用 sed,复杂的格式化用 awk。
按列处理数据:cut 适合简单的字段提取,awk 适合复杂的列操作和计算。
排序和统计:sort 排序,uniq 去重统计,两者经常配合使用。
字符转换:大小写转换、删除特定字符用 tr。
这一章我们逐一学习这些工具:
掌握这些工具,就能应对绝大多数文本处理场景。它们组合起来,威力更是惊人。