树叶云UNIX教程: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 命令中进行使用:

参数描述
-v打印所有没有匹配的行。
-n打印所有成功匹配的行和行号。
-l打印匹配的文件名和匹配的行(“l”来自字母 letter)。
-c仅仅打印成功匹配到行的个数。
-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 命令默认是按字母顺序进行排序。有很多可选参数,可以控制排序:

参数描述
-n数值顺序进行排序 (例如: 10 将会被排到 2 之后),忽略空格和 tab 符。
-r将排序的顺序反转。
-f将大小写排在一起。
+x排序的时候忽略第一个 x 字段。

两个或者两个以上的命令就可以形成管道。拿前面提到的 grep 命令为例,我们可以按照文件的大小进一步对 August 文件进行排序。

如下管道包含了 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
$

上面的管道将会按照文件的大小对 August 目录下的文件进行排序,并将它们打印到终端屏幕。排序参数 +4n 会跳过 4 个字段(由空格分隔的字段),接着在按照数值顺序对行进行排序。

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 程序的命令。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/194467.html<

(0)
管理的头像管理
上一篇2025-04-02 13:01
下一篇 2025-04-02 13:02

相关推荐

  • 云服务器和云虚拟主机怎么选?云服务器和虚拟主机区别

    云服务器适合业务增长快、需弹性扩展的场景,而云虚拟主机适合预算有限、技术门槛低的小型静态网站或测试环境,二者核心区别在于资源独享性与运维复杂度,核心差异解析:从底层架构到使用体验很多人容易混淆这两者,觉得它们都是“买空间建站”,它们的底层逻辑完全不同,云服务器(ECS)就像是你租了一整栋别墅,水电网络独立,你想……

    2026-06-29
    0
  • 赣州智慧旅游招聘是真的吗?赣州旅游人才招聘信息

    中级岗位(3-5年经验)月薪范围通常在6000-10000元,这类岗位需要独立负责项目模块,如独立运营一个抖音账号,或维护一个景区小程序的功能迭代,具备成功案例的候选人议价能力较强,高级岗位(5年以上经验)月薪范围通常在10000-20000元,部分核心管理岗可达更高,这类人才需要具备战略规划能力,如制定整个景……

    2026-06-29
    0
  • 赣州智能物联网车位锁如何管理?智能车位锁管理系统多少钱

    赣州智能物联网车位锁管理的核心在于通过云端平台实现远程控锁、状态实时监控及自动计费,彻底解决传统车位“被占难管”与“找位难”的痛点,在赣州这样的城市,随着机动车保有量的持续增长,老旧小区、商业综合体以及私人固定车位的资源矛盾日益凸显,传统的机械地锁或简易遥控锁,不仅操作繁琐,更无法实现数据化管理,引入智能物联网……

    2026-06-29
    0
  • 赣州智能消防栓好用吗,智能消防栓多少钱一个

    赣州智能消防栓通过物联网技术实现实时监测与远程报警,能显著降低火灾响应时间并提升城市消防安全管理水平,是目前智慧城市建设中不可或缺的基础设施,赣州智能消防栓的核心价值与应用场景传统消防栓往往存在“看不见、摸不着、用不了”的痛点,在赣州这样地形复杂、老城区与新城区并存的区域,传统设施的管理难度极大,智能消防栓的出……

    2026-06-29
    0
  • 云服务器和物理机到底有啥区别?

    云服务器本质上是虚拟化资源池中的弹性实例,而传统物理服务器是独占的硬件实体,前者胜在弹性与运维便捷,后者强在物理隔离与性能稳定,具体选择取决于业务对成本、扩展性及安全合规的权衡,很多人初次接触服务器时,容易把“云服务器”和“传统物理服务器”混为一谈,觉得它们都是用来跑网站或存数据的盒子,这两者的底层逻辑完全不同……

    2026-06-29
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注