教程三

使用Google翻译翻译自: http://www.ee.surrey.ac.uk/Teaching/Unix/unix3.html


3.1重定向

由UNIX命令启动的大多数进程将输出写入标准输出(即终端屏幕),并且许多进程从标准输入(即键盘)读入。还有标准错误,其中进程默认将其错误消息写入终端屏幕。

我们已经看到一个使用cat命令将文件的内容写入屏幕的例子。

现在键入cat而不指定要读取的文件

%cat

然后在键盘上键入几个字,然后按[ 回车 ]键。

最后按住[ Ctrl ]键,按[ d ](简写为^ D)结束输入。

发生了什么?

如果您在运行cat命令时没有指定要读取的文件,则会从标准输入(键盘)读取,并在接收到“文件结束”(^ D)时将其复制到标准输出(屏幕)。

在UNIX中,我们可以重定向命令的输入和输出。

3.2重定向输出

我们使用>符号重定向命令的输出。例如,要创建一个名为list1的文件,其中包含一个水果列表,请输入

%cat> list1

然后输入一些水果的名字。在每个之后按[ 回车 ]。

pear
banana
apple
^ D {这意味着同时按[Ctrl]和[d]}

cat命令会读取标准输入(键盘),>将标准输出(通常是屏幕)重定向到list1文件中

要读取文件的内容,请键入

%cat list1

练习3a

使用上述方法,创建另一个名为list2的文件,其中包含以下水果:orange, plum, mango, grapefruit。读取list2的内容

 

3.2.1附加到文件

>>将标准输出附加到文件。所以要添加更多的项目到文件list1时,键入

%cat >> list1

然后输入更多水果的名字

peach
grape
orange
^D(Ctrl+d 停止)

要读取文件的内容,请键入

%cat list1

你现在应该有两个文件。一个包含六个水果,另一个包含四个水果。

现在我们将使用cat命令把list1list2连接成一个名为biglist的新文件。键入

%cat list1 list2> biglist

这样做会 依次读取list1list2的内容,然后将文本输出到文件biglist

要读取新文件的内容,请键入

%cat biglist

3.3重定向输入

我们使用<来重定向命令的输入。

sort命令按字母顺序或数字顺序排序一个列表。键入

%sort

然后输入一些动物的名字。在每个之后按[回车]。

dog
cat
bird
ape
^D(Ctrl+d 停止)

输出将是

ape
bird
cat
dog

使用<您可以将输入重定向为来自文件而不是键盘。例如,要排序水果列表,请键入

%sort <biglist

排序的列表将被输出到屏幕。

要将已排序的列表输出到文件,请键入

%sort <biglist> slist

使用cat来读取文件的内容SLIST

3.4管道

要查看谁在使用系统,请输入

%who

获取这些人名列表的排序结果的一种方法是输入

%who> names.txt
%sort <names.txt

这有点慢,而且完成后你必须记得删除名为names.txt的临时文件。你真正想要做的是将who命令的输出直接连接到sort命令的输入。这正是管道所做的。管道的符号是垂直符|

例如,输入

%who|sort

将得到与上述相同的结果,但更快更干净。

要了解有多少用户登录,请键入

%who| wc -l

练习3b

使用管道,显示包含 字母“p” 的list1list2的所有行,并对结果进行排序。

在这里可以看到答案

总结

命令 含义
command > file 将标准输出重定向到文件
command >> file 将标准输出附加到文件
command < file 从文件重定向标准输入
command1 | command2 将command1的输出通过管道连接到command2的输入
cat file1 file2 > file0 将file1和file2合并为file0
sort 排序数据
who 列出当前系统登录的用户