串联多个命令
本课属于 Coddy Terminal 学习旅程的“基础知识”单元。第 45 课,共 82 课。
你不必只连接两个命令。管道可以按需串联任意多个命令,每个命令都会处理前一个命令的输出。
只需添加更多 | 符号即可延长管道:
cat data.txt | sort | head -5这会读取文件,按字母顺序对所有行排序,然后只显示前 5 个结果。数据会依次通过每个命令,从左向右流动。
下面是一个查找排序后不重复条目的实用示例:
cat names.txt | sort | uniq文件内容会先排序(这样重复项就会排在一起),然后 uniq 会删除连续的重复行。这里顺序很重要:uniq 只能删除相邻的重复项,所以必须先排序。
你还可以添加更多步骤。要统计有多少个不重复的名称:
cat names.txt | sort | uniq | wc -l每个管道都会添加一个转换步骤。构建较长的管道时,要考虑每个命令需要什么输入,以及会产生什么输出。一个命令的输出格式必须适合作为下一个命令的输入。
挑战
简单文件 visitors.txt 中包含一份访客姓名列表,其中有重复项。使用包含四条命令的管道,统计不重复的访客人数。
运行一条命令,完成以下操作:
- 使用
cat读取visitors.txt - 通过管道将结果传给
sort,按字母顺序排列姓名 - 通过管道将结果传给
uniq,移除重复项 - 通过管道将结果传给
wc -l,统计不重复的姓名数量
提示:使用多个
|符号将四条命令连接起来。请记住,uniq只能移除相邻的重复项,因此必须先排序。
亲手试试
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
基础知识中的所有课
自己练习: Terminal 在线编辑器