- Unix/Linux 初学者指南
- Unix/Linux - 首页
- Unix/Linux - 什么是 Linux?
- Unix/Linux - 入门指南
- Unix/Linux - 文件管理
- Unix/Linux - 目录
- Unix/Linux - 文件权限
- Unix/Linux - 环境
- Unix/Linux - 基本实用程序
- Unix/Linux - 管道和过滤器
- Unix/Linux - 进程
- Unix/Linux - 通信
- Unix/Linux - vi 编辑器
- Unix/Linux Shell 编程
- Unix/Linux - Shell 脚本
- Unix/Linux - 什么是 Shell?
- Unix/Linux - 使用变量
- Unix/Linux - 特殊变量
- Unix/Linux - 使用数组
- Unix/Linux - 基本运算符
- Unix/Linux - 决策
- Unix/Linux - Shell 循环
- Unix/Linux - 循环控制
- Unix/Linux - Shell 替换
- Unix/Linux - 引号机制
- Unix/Linux - I/O 重定向
- Unix/Linux - Shell 函数
- Unix/Linux - 手册页帮助
- 高级 Unix/Linux
- Unix/Linux - 标准 I/O 流
- Unix/Linux - 文件链接
- Unix/Linux - 正则表达式
- Unix/Linux - 文件系统基础
- Unix/Linux - 用户管理
- Unix/Linux - 系统性能
- Unix/Linux - 系统日志
- Unix/Linux - 信号和陷阱
Unix/Linux - 管道和过滤器
在本章中,我们将详细讨论 Unix 中的管道和过滤器。您可以将两个命令连接在一起,以便一个程序的输出成为下一个程序的输入。以这种方式连接的两个或多个命令构成一个管道。
要创建管道,请在命令行中两个命令之间放置一个垂直条 (|)。
当一个程序从另一个程序获取输入时,它会对该输入执行某些操作,并将结果写入标准输出。它被称为过滤器。
grep 命令
grep 命令搜索文件或多个文件以查找具有特定模式的行。语法如下:
$grep pattern file(s)
名称"grep"来自 ed(一个 Unix 行编辑器)命令g/re/p,意思是“全局搜索正则表达式并打印所有包含它的行”。
正则表达式可以是一些纯文本(例如一个单词)和/或用于模式匹配的特殊字符。
grep 最简单的用法是查找由单个单词组成的模式。它可以用于管道,以便只有包含给定字符串的输入文件的那些行被发送到标准输出。如果您没有给 grep 提供要读取的文件名,它将读取其标准输入;所有过滤器程序都是这样工作的:
$ls -l | grep "Aug" -rw-rw-rw- 1 john doc 11008 Aug 6 14:10 ch02 -rw-rw-rw- 1 john doc 8515 Aug 6 15:30 ch07 -rw-rw-r-- 1 john doc 2488 Aug 15 10:51 intro -rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros $
您可以与grep命令一起使用各种选项:
序号 | 选项及描述 |
---|---|
1 |
-v 打印所有不匹配模式的行。 |
2 |
-n 打印匹配的行及其行号。 |
3 |
-l 仅打印包含匹配行的文件名(字母“l”)。 |
4 |
-c 仅打印匹配行的计数。 |
5 |
-i 匹配大写或小写。 |
现在让我们使用一个正则表达式,该表达式告诉 grep 查找包含"carol"的行,后跟零个或多个字符(在正则表达式中缩写为 ".*"),然后后跟 "Aug"。
在这里,我们使用-i选项进行不区分大小写的搜索:
$ls -l | grep -i "carol.*aug" -rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros $
sort 命令
sort命令按字母或数字顺序排列文本行。以下示例按字母顺序对 food 文件中的行进行排序:
$sort food Afghani Cuisine Bangkok Wok Big Apple Deli Isle of Java Mandalay Sushi and Sashimi Sweet Tooth Tio Pepe's Peppers $
默认情况下,sort命令按字母顺序排列文本行。有很多选项可以控制排序:
序号 | 描述 |
---|---|
1 |
-n 按数字顺序排序(例如:10 将在 2 之后排序),忽略空格和制表符。 |
2 |
-r 反转排序顺序。 |
3 |
-f 将大写和小写字母一起排序。 |
4 |
+x 在排序时忽略前x个字段。 |
可以将两个以上命令链接到管道中。以之前使用grep的管道示例为例,我们可以进一步按大小顺序对 8 月份修改的文件进行排序。
以下管道由ls、grep和sort命令组成:
$ls -l | grep "Aug" | sort +4n -rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros -rw-rw-r-- 1 john doc 2488 Aug 15 10:51 intro -rw-rw-rw- 1 john doc 8515 Aug 6 15:30 ch07 -rw-rw-rw- 1 john doc 11008 Aug 6 14:10 ch02 $
此管道按大小顺序对您目录中 8 月份修改的所有文件进行排序,并在终端屏幕上打印它们。sort 选项 +4n 跳过四个字段(字段由空格分隔),然后按数字顺序对行进行排序。
pg 和 more 命令
通常,您可以将屏幕上的长输出压缩,但是如果您通过 more 运行文本或使用pg命令作为过滤器;一旦屏幕上充满了文本,显示就会停止。
假设您有一个很长的目录列表。为了更轻松地阅读排序后的列表,请将输出通过more传递,如下所示:
$ls -l | grep "Aug" | sort +4n | more -rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros -rw-rw-r-- 1 john doc 2488 Aug 15 10:51 intro -rw-rw-rw- 1 john doc 8515 Aug 6 15:30 ch07 -rw-rw-r-- 1 john doc 14827 Aug 9 12:40 ch03 . . . -rw-rw-rw- 1 john doc 16867 Aug 6 15:56 ch05 --More--(74%)
一旦屏幕上充满了由文件大小顺序排序的行,屏幕就会填满。屏幕底部是more提示符,您可以在其中键入命令以浏览排序后的文本。
完成此屏幕后,您可以使用 more 程序讨论中列出的任何命令。