13.9. 使用 cat 来操作文件

Red Hat Linux 有一个工具程序,它能够帮助你保留简短列表,将这些列表收集起来,甚至向你透漏一点你的系统信息。

这个工具叫做 cat,它是 concatenate(连锁) 的简写,意思是合并文件。

cat 命令还会在屏幕上显示整个文件的内容(譬如,键入 cat filename.txt)。如果文件较长,它会在屏幕上飞快地滚过。要防止这一效果的发生,使用 cat filename.txt | less 命令。

一起使用管道(|)和 less 命令会一页一页地显示文件。然后,你便可以使用向上或向下的箭头键在页码中向前或向后移动。关于使用管道来合并两个不同功能的详细信息,请参阅第 13.10 节

13.9.1. 使用重导向

重导向就是使 shell 改变它所认定的标准输出,或者改变标准输出的目标。

要重导向标准输出,使用 > 符号。把 > 符号放在 cat 命令之后(或在任何写入标准输出的工具程序和应用程序之后),会把它的输出重导向到跟在符号之后的文件中。

譬如,使用 cat 自身会在屏幕上输出你所输入的内容,如同是在重复你刚键入的行。下面的例子显示了 cat 会重复你输入的每一行:

图 13-5. cat 命令

要把 cat 的输出重导向到一个文件中,在 shell 提示下键入以下命令(按 [Enter] 键会把你带到一个空行):

cat > sneakers.txt

图 13-6. 把输出重导向到一个文件

[Enter] 键转到一个空行,然后使用 [Ctrl]-[D] 键 来退出 cat

注意到图 13-6中的区别了吗?此处并没有重复显示。这是因为 cat 的标准输出已经被重导向了。重导向的地方是你刚刚制作的一个叫做 sneakers.txt 的崭新文件。

当你运行 cat 命令时,你会发现你所在目录中的文件(如果你想列举这些文件,键入 ls)。

如前所示,你可以使用 cat 来读取文件。在提示下,键入:

cat sneakers.txt

小心小心
 

在你把输出重导向入文件时,请谨慎从事,因为你会很容易地覆盖一个现存文件!除非你想代替该文件,请确保你所创建的文件名与已经存在的文件名不一样。

再把输出重导向到另一个文件,暂且把它叫做 home.txt。在这个例子中,键入命令 cat > home.txt,然后按 [Enter],其后跟随:

bring the coffee home
take off shoes
put on sneakers
make some coffee
relax!

现在,在一个空行上,使用 [Ctrl]-[D] 键组合来退出 cat

下一步,使用 cathome.txtsneakers.txt 连接起来,然后再把两个文件的输出重导向到一个叫做 saturday.txt 的新文件(你会在图 13-7 中发现一个示例)。键入下面的命令:

cat sneakers.txt home.txt > saturday.txt

图 13-7. 连接文件和重导向输出

你可以看到 cat 已经把 home.txt 添加到 sneakers.txt 的结尾处。

13.9.2. 后补标准输出

你可以使用输出重导向来在一个现存文件之后添加新信息。这与你使用 > 符号相似,你是在告诉 shell 把信息发送到标准输出之外的某个地方。

然而,当你使用 >> 时,你是在给文件添加信息,而不是完全替换文件内容。

最好的解释方法是向你演示实例。我们便使用刚才已创建的两个文件(sneakers.txthome.txt),然后使用后补输出的符号把它们连接起来。你想把 home.txt 的信息添加到 sneakers.txt 的信息中去,因此键入:

cat home.txt >> sneakers.txt

现在,使用 cat sneakers.txt 的命令来检查一下。最终的输出在文件结尾处显示了 home.txt 的内容:

buy some sneakers
then go to the coffee shop
then buy some coffee
bring the coffee home
take off shoes
put on sneakers
make some coffee
relax!

你键入的命令把文件 home.txt 的输出后补到文件 sneakers.txt 中去。

通过后补输出,你利用了现存文件而不必创建新文件,从而为自己节省些时间(以及一些磁盘群集)。

现在比较一下文件 sneakers.txt 和文件 saturday.txt 的结果,你就会看到它们一模一样。要做比较,键入:

cat sneakers.txt; cat saturday.txt

这两个文件的内容都会被显示 — 先是 sneakers.txt 文件,然后是 saturday.txt 文件 (如 图 13-8 所示)。

图 13-8. 串联命令和比较文件

13.9.3. 重导向标准输入

你不但可以重导向标准输出,还可以重导向标准输入。

当你使用重导向标准输入符号 < 时,你是在告诉 shell 你想使用某个文件作为命令的输入。

使用一个你已创建的文件来演示这一概念。键入:

cat < sneakers.txt

因为你用来分隔 cat 命令和文件的是小于号(<),sneakers.txt 的输出就被 cat 命令读取。

图 13-9. 重导向标准输入