学习 Linux,101:文本流和过滤器(2)

文本过滤指的是这样一个过程:获得文本的输入流,并在将文本发送给输出流之前对文本执行一些转换。尽管输入或输出都可以来自某个文件,但是在 Linux 和 UNIX? 环境中,实现过滤的最常见方法是构建一个命令管道,其中来自一个命令的输出被传输 或重定向 以用作下一个命令的输入。关于管道和重定向的内容,我们将在有关流、管道和重定向 的文章中更详细地介绍(可以在 学习 Linux,101: LPIC-1 路线图  中找到),不过现在先让我们看看使用 | 和 > 操作实现管道和基本的输出重定向。

流 只不过是一个可以使用库功能读取或写入的字节序列,库功能向应用程序隐藏了底层设备的细节。通过使用流,相同的程序可以使用独立于设备的方式从终端、文件或网络 socket 中读取,或向其中写入。现代编程环境和 shell 使用三种标准的 I/O 流:

stdin 是标准输入流,为命令提供输入。 stdout 是标准输出流,显示来自命令的输出。 stderr 是标准错误流,显示命令中的错误输出。

使用 | 实现管道

输入可以来自您为命令提供的参数,输出可以显示到您的终端上。许多文本处理命令(过滤器)可以从标准输入流或从文件中获取输入。要将命令 command1 的输出作为过滤器 command2 的输入,您需要使用管道操作符 (|) 连接两个命令。清单 1 展示了如何传输 echo 的输出,以对一个小的单词列表进行分类。


清单 1. 将 echo 的输出传输到 sort 的输入
[ian@echidna ~]$ echo -e "apple\npear\nbanana"|sort apple banana pear  

任何命令都包含选项或属性。您还可以使用 | 将管道中第二个命令的输出重定向到第三个命令,依此类推。在 Linux 和 UNIX 中,一种常见的执行任务的方式就是构建一个长的命令管道,每个命令只具备有限的功能。您有时会看到使用一个连字符 (-) 来代替文件名作为命令的参数,这意味着输入应当来自 stdin 而不是文件。

使用 > 重定向输出

创建由若干命令组成的管道并在终端观察输出固然不错,然而有些情况下您需要将输出保存到文件中。可以通过输出重定向操作符 (>) 实现这一点。

在本节后面的内容中,我们将使用一些小型文件,因此让我们创建一个名为 lpi103-2 的目录并通过 cd 进入到该目录。随后使用 > 将 echo 命令的输出重定向到名为 text1 的文件。清单 2 展示了整个过程。注意,输出并没有显示在终端上,因为它被重定向到了文件中。


启动 2. 将命令输出重定向到文件
[ian@echidna ~]$ mkdir lpi103-2 [ian@echidna ~]$ cd lpi103-2 [ian@echidna lpi103-2]$ echo -e "1 apple\n2 pear\n3 banana" > text1  

现在,我们具备了一些基本的工具来实现管道和重定向,让我们研究一些常见的 UNIX 和 Linux 文本处理命令和过滤器。本节将展示一些基本的功能;查看对应的手册页来获得有关这些命令的详细内容。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/27840.html