3.1 重定向
大多数 UNIX 命令初始化进程都写入到标准输出中(即终端显示屏),而且他们 大多数会从标准输入获得输入(即从键盘输入获得)。这还有一个供进程写入错 误信息的标准错误输出(默认输出到终端屏幕上)。
我们已经见过 cat
的一种用法:显示文件内容。下面键入 cat
不带任何文件。
% cat
然后随便敲点字儿后按回车。最后键入 Ctrl + D (以后简写为 ^D
)。发生了什么
呢?如果不提供文件给 cat
,他会从标准输入(键盘输入)中读取内容,当收到
“文件结束(^D)”时复制标准输入到标准输出(终端显示屏)。
在 UNIX 中我们即可以重定向命令的输入还可以重定向输出。
3.2 重定向输出
我们可以使用符号 >
将命令的输出重定向。举个例子,创建一个名为 list1 的
文件,文件内包含一个水果列表,键入:
% cat > list1
然后键入一些水果的名字,每键入一个水果名后都要按回车。
pear
banana
apple
^D {means Ctrl + D}
这个过程是这样的: cat
从标准输入中读取内容,然后 >
将本应该输出到标准
输出的内容重定向到文件 list1. 现在读取文件 list1 :
% cat list1
练习 3a
用上面的方法创建文件 list2 ,包含下列水果: orange, plum, grapefruit. 然 后看看 list2 的内容
3.2.1 向文件中追加内容
使用 >>
可以把标准输出追加到文件中。因此现在可以向 list1 中添加更多的
水果:
% cat >> list1
然后键入:
peach
grape
orange
^D
看看加上了没,键入:
% cat list1
你现在应该有2个文件了(list1, list2),一个里面有6个水果另一个有4个。现在
我们可以使用 cat
命令把它们拼接起来组成一个新文件 biglist。键入:
% cat list1 list2 > biglist
上面的代码依次读取 list1 list2 的内容然后输出到 biglist 内。 看看 biglist 吧:
% cat biglist
3.3 重定向输入
使用 <
重定向命令的输入。sort
命令可以按字母顺序或数字排列列表。键入:
% sort
然后键入一些动物名,每个动物名后按回车。
dog
cat
bird
ape
^D
会得到这样的输出:
ape
bird
cat
dog
使用 <
可以将标准输入(键盘输入)重定向到文件。下面排列一下水果列表:
% sort < biglist
排列后的列表会显示在屏幕上,也可以把结果保存到文件中:
% sort < biglist > slist
看看 slist 里有什么吧。
3.4 通道
看看除了你谁还登录了此系统:
% who
一个获得按用户名排序列表的方法:
% who > names.txt
% sort < names.txt
这个方法微慢,而且你需要记得删除临时用的文件(names.txt)。实际上,你真
正需要是直接连接 who
的输出与 sort
的输入,准确的说你需要一个通道。
通道的符号是一个竖杠 |
。举个例子:
% who | sort
上面的命令可以得到相同的结果,而且更快更清晰。现在看看一共有多少 个人登录:
% who | wc -l
练习 3b
使用通道显示 list1 和 list2 中所有包含字符 p 的行,而且对结果进行排序。
答案:
% cat list1 list2 | grep p | sort
总结
-
command > file - 标准输出转到文件。
-
command » file - 标准输出追加到文件。
-
command < file - 标准输入转到文件。
-
command1 | command2 - 使用管道将 command1 的输出传送给 command2 的 输入。
-
cat file1 file2 > file0 - 连接 file1 与 file2 到 file0。
-
sort - 排序。
-
who - 列出当前已登录的用户。