Linux 命令实战 · 第 3 章 文本处理流水线


Linux 命令实战 · 第 3 章 文本处理流水线

章节摘要:这是全书最硬核、收益最高的一章。Linux 命令行真正让人上瘾的瞬间,是当你用一行管道 grep ERROR app.log | awk '{print $1}' | sort | uniq -c | sort -rn | head,就把一份十万行日志里「出错最多的十个来源」算了出来——没有 Python 脚本,没有 Excel,只有六个各司其职的小工具串在一起。本章要把这种「管道组合的工程美学」彻底讲透。我们不逐条背 sed 的所有子命令,而是让你看懂:为什么 Unix 哲学要把每个工具设计成「只做一件事、读 stdin、写 stdout」,以及这种设计如何让简单工具组合出惊人能力。grep(找)、sed(改)、awk(算)是本章三巨头,把这三者加上 sort/uniq/cut/tr/xargs 的组合练成肌肉记忆,你的命令行功力就过了一大关。

学习目标

阅读完本章,你应当能够:

  1. 用 cat、less、head、tail 按需查看文件内容,区分「一次性打印」与「分页浏览」的适用场景。
  2. 用 grep 做正则搜索,理解基本正则、扩展正则(-E)、固定字符串(-F)的差别,以及 -v、-i、-n、-r、-c 的取舍。
  3. 用 sed 做流式编辑,掌握替换(s/old/new/g)与按行删除(Nd)两大场景,理解它「按行读、改、写」的工作方式。
  4. 用 awk 做按列处理,理解它的「字段(1/$2/NF)、记录(NR/NF)、模式-动作」编程模型。
  5. 用 cut、sort、uniq、tr、wc、tee 完成字段切分、排序去重、字符替换、计数、分流。
  6. 用 xargs 把 stdin 转成命令参数,理解它「填补管道最后一公里」的角色与 -I、-0 的用法。
  7. 把上述工具串成「日志统计、字段提取、批量改名」三大经典管道模式。

核心概念速览

Unix 文本工具的精髓是「过滤-变换-计算-聚合-分发」五段流水线——每个工具只接手一段,通过 stdin/stdout 串成一条数据加工链。掌握这条链,等于掌握了一种独立的编程范式。

子章节导航

01 看文件:cat、less、head、tail

cat 适合短文件全打印与拼接、less 是分页浏览之王、head/tail 取头尾(尤其 tail -f 跟踪日志)。讲清各自适用场景,以及为什么「用 cat 读大文件」是坏习惯。

02 搜索:grep 与正则基础

grep 是文本处理的入口。讲清基本正则与扩展正则(-E)的差别、常用选项(-v/-i/-n/-r/-c/-l),并穿插正则基础(.、*、[]、^、$、|)。一个经典例子:grep -E 'ERROR|WARN' app.log。

03 流编辑:sed

sed 是「按行读、改、写」的流编辑器。重点掌握替换 s/old/new/g 与按行删除 Nd,以及 -i 原地修改的危险与备份技巧(-i.bak)。一个经典例子:把所有 foo 改成 bar,sed -i 's/foo/bar/g' *.txt。

04 按列处理:awk

awk 是本章最难也最强大的工具。讲清它的「记录(行)/字段(列)/模式-动作」模型,用三个递进例子:打印第二列({print $2})、筛选并求和($3>100 {sum+=$3})、按某列分组统计。awk 是把命令行从「查找」升级到「分析」的关键。

05 切分、排序与去重:cut、sort、uniq

三件套组合。cut 按分隔符或位置取列、sort 排序(注意 -n 数值序、-r 逆序、-k 按列)、uniq 去重(必须先排序,常配 -c 计数)。经典模式:sort | uniq -c | sort -rn 找高频项。

06 字符替换与计数:tr、wc

tr 做单字符级替换或删除(如大小写转换、去掉换行)、wc 数行/词/字符(-l/-w/-c)。两者都是小而美的补刀工具。

07 分流与参数传递:tee、xargs

tee 把 stdin 同时写到文件和 stdout(管道中途存盘)、xargs 把 stdin 转成命令参数(管道末端把数据变成动作)。重点讲 xargs -I {} 自定义占位符与 -0(配合 find -print0 的安全分隔)。

08 管道组合的三大经典模式

把前七节串起来,演示三个高频实战模式:日志统计(grep+awk+sort+uniq)、字段提取(cut/awk+sed 清洗)、批量改名(find+xargs+mv 或 sed)。这一节是全章的「综合应用题」。

子章节之间的逻辑关系

本章遵循「单工具 → 五段流水线 → 综合模式」的递进路径:

cat/less/head/tail (01) ── 先学会"看"文本 │ ▼ grep (02) ── 过滤:留下含模式的行 │ ▼ sed (03) ── 变换:改字符/删行 │ ▼ awk (04) ── 计算:按列统计(本章难点) │ ▼ cut/sort/uniq (05) ── 聚合:取列排序去重 │ ▼ tr/wc (06) ── 补刀:字符替换与计数 │ ▼ tee/xargs (07) ── 分发:存盘与参数传递 │ ▼ 三大经典模式 (08) ── 综合应用:日志统计/字段提取/批量改名 │ ▼ 第 4 章:从"文本"回到"文件",讲查找、归档与备份 ​

前七节是「单工具」,每节对应流水线的一段(过滤/变换/计算/聚合/分发);第八节是综合,把单工具串成实战模式。awk(04)是本章的难度高点,值得多花时间;第 8 节则是检验你是否真正「把管道内化」的标尺。

前置知识与后续延伸

前置知识:

  • 第 1 章(尤其标准流与管道——本章所有组合都建立其上)
  • 第 2 章(对「文件是字节流」的认知)

本章为后续章节奠定的基础:

  • grep/sed/awk 是第 9 章(Shell 脚本)里文本处理的常驻嘉宾
  • xargs 是第 4 章(find ... -exec 与 find | xargs 对比)的关键对照
  • 管道思维贯穿全书,本章是它的「主场」
  • 「正则表达式」概念会在姊妹篇《造轮子工程》第 4 章「造正则引擎」里从「会用」升级到「会造」

作者与出处
原作者: 灏天文库
来源:jaywcjlove
许可证:MIT
整理: 灏天文库整理
由灏天文库结构化整理,提供目录导航、全文检索与在线阅读,便于系统化学习
发布者: 作者: 灏天文库 转发
评论区 (0)
U