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

现在您已经创建了 test1 文件,您可能需要检查其中的内容。使用 cat(concatenate 的简写)命令显示 文件在使用标准输出时的内容。清单 3 检验了前面创建的文件的内容。


清单 3. 使用 cat 显示文件内容
[ian@echidna lpi103-2]$ cat text1 1 apple 2 pear 3 banana  

如果没有指定文件名(或者如果指定 - 作为文件名)的话,cat 命令将从 stdin 获取输入。让我们结合使用输出重定向来创建另一个文本文件,如清单 4 所示。


清单 4. 使用 cat 创建一个文本文件
[ian@echidna lpi103-2]$ cat >text2 9 plum 3 banana 10 apple  

  大量小型过滤器

另一个小型过滤器的例子就是 tac 命令。这个命令的名称正好与 cat 相反,并且其功能也与 cat 的功能相反,因为这个文件是按逆序显示的。尝试亲自运行
tac text2 text1

 
 

在清单 4 中,cat 将一直从 stdin 中读取文件,直到读完全部文件。使用 Ctrl-d(按下 Ctrld)组合键来表示已到文件末尾。使用相同的组合键来退出 bash shell。使用 tab 键将水果名排成一列。

注意,cat 是 concatenate 的简写,您可以使用 cat 将多个文件链接在一起一并显示。清单 5 展示了我们刚刚创建的两个文件。


清单 5. 使用 cat 链接两个文件
[ian@echidna lpi103-2]$ cat text* 1 apple 2 pear 3 banana 9 plum 3 banana 10 apple  

当您使用 cat 显示这两个文本文件时,将注意到一些排列差异。要了解造成这种差异的原因,需要查看文件中的控制字符。这些字符作用于文本显示输出,而不是显示控制字符本身的某些表示,因此我们需要以一种格式来转储 文件,这种格式允许您查找并解释这些特殊字符。GNU 文本实用工具包括了一个 od(即 Octal Dump)命令,可以实现这一点。

od 提供了若干选项,比如 -A 选项可以控制文件偏移的基数,而 -t 选项可以控制显示的文件内容的形式。可以将基数指定为 o(默认的八进制)、d(十进制)、x(十六进制)或 n(未显示偏移)。您可以将输出显示为八进制、十六进制、十进制、浮点数、包含反斜杠转义符的 ASCII,或者指定的字符(nl 表示换行、ht 表示水平制表符,等等)。清单 6 展示了一些可用于转储 text2 示例文件的格式。


清单 6. 使用 od 转储文件
[ian@echidna lpi103-2]$ od text2 0000000 004471 066160 066565 031412 061011 067141 067141 005141 0000020 030061 060411 070160 062554 000012 0000031 [ian@echidna lpi103-2]$ od -A d -t c text2 0000000 9 \t p l u m \n 3 \t b a n a n a \n 0000016 1 0 \t a p p l e \n 0000025 [ian@echidna lpi103-2]$ od -A n -t a text2 9 ht p l u m nl 3 ht b a n a n a nl 1 0 ht a p p l e nl  

注意:

cat 的 -A 选项提供了另一种方法来查看制表符和行结束符的位置。参见手册页获得更多内容。 如果您自己的 text2 文件中显示的是空格而不是制表符,那么请参考本文后面的 一节,了解在文件中如何在制表符和空格之间切换。 如果您拥有大型机方面的背景,那么很可能对 hexdump 工具感兴趣,该工具包含在另一个工具集中。本文并不打算介绍此工具,因此请查阅手册页。

我们的样例文件非常小,但是您有时会遇到特别大的文件,需要将其拆分为比较小的文件。例如,您可能希望将一个大文件拆分为 CD 大小的块,这样您就可以将其写入到 CD 中,以便通过邮件将其发送给可以为您创建 DVD 的人。split 命令将实现这一目的,并且在此过程中可以使用 cat 轻松地重新创建文件。默认情况下,由 split 命令生成的文件在其名称中使用 ‘x’ 作为前缀,后面使用 ‘aa’、‘ab’、‘ac’……‘ba’、‘bb’ 等作为后缀。可以使用选项修改这些默认设置。您还可以控制输出文件的大小,以及控制结果文件中包含的内容(包含整行或是仅包含字节计数)。

清单 7 演示了对两个文本文件执行分解的过程,对输出文件使用了不同的前缀。我们将 text1 分解为至多包含两行文本的文件,将 text2 分解为至多包含 18 个字节的文件。然后使用 cat 分别显示分解后的文件,并使用通配符(globbing)显示完整的文件,我们将在有关基本文件和目录管理 的文章中介绍通配符(可以在 学习 Linux,101: LPIC-1 路线图 中找到相关文章)。


清单 7. 使用 split 和 cat 分解和合并文件
[ian@echidna lpi103-2]$ split -b 17 text2 y [ian@echidna lpi103-2]$ cat yaa 9 plum 3 banana 1[ian@echidna lpi103-2]$ cat yab 0 apple [ian@echidna lpi103-2]$ cat y* x* 9 plum 3 banana 10 apple 1 apple 2 pear 3 banana  

注意,名为 yaa 的分解文件并未使用换行符表示结束,因此当使用 cat 显示提示之后,会发现提示出现了偏移。

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

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