
一、管道及使用
管道是一种shell特性。命令从标准输入读取数据,并将数据发送到标准输出的能力,就是管道特性。
使用管道操作符“I”(竖线)可以把一个命令的标准输出传送到另一个命令的标准输入中。具体格式如下:
Command 1 I command2 ...
可以用多个|联结多条命令。
不同命令使用管道相联结,可以实现很多功能。
以下举例叙述。
二、用管道功能分页输出命令结果
less命令可以接受标准输入,因此可以用less命令接受任意命令的输出,并发送到标准输出。因此可以用来验证管道功能。
由于less命令是分布输出的,这样就可以实现任何命令结果的分页输出。否则,有的命令输出很多,我们就看不到前面的输出了。
例如:
$ Is -l /usr/bin | less
会分页显示Is -l /usr/bin的输出。当Is -l /usr/bin的输出很多时,这样做就是必要的,除非我们对命令结果不关心。
注意,这时,用回车是一行一行地显示,而用翻页键可以一页一页地翻。page up是向前翻,page down是向后翻。
这个例子中,使用管道联结了两个命令。
三、使用管道输出排序后的结果
假设要把/bin和/usr/bin目录下的所有可执行程序合并成一个列表,并且按照顺序排列,最后再查看这个列表。
$ Is /bin /usr/bin | sort | less
由于我们指定了两个目录(/bin和/usr/bin) , Is的输出将包含两个排好序的列表,每个对应一个目 录。
通过在管道中包含sort命令,我们改变输出数据,从而产生一个排好序的列表。
这个例子,使用管道联结了三个命令。
四、删除输出中的重复行
将ls的输出先排序,然后删除重复行,再分页显示:
$ Is /bin /usr/bin | sort | uniq | less
这个例子,使用管道联结了四个命令。
五、显示输出的行数
查看已排好序的列表中的条目数:
$ Is /bin /usr/bin | sort | uniq | wc -l
ls的输出,被sort排序,再用uniq删除重复行,之后用wc计算出行数。wc的选项-l使得只报告行数(l为line的首字母)。
这个例子,使用管道联结了四个命令,其中wc使用了选项。这个例子说明,被联结的命令可以使用操作对象(此例中的ls)和选项(此例中的wc)。
六、显示指定的文件
在用管道联结grep命令,可以实现显示指定的文件的功能。
例如,要显示目录/bin和/usr/bin中文件名中包含zip的文件,则可以像下面这样:
$Is /bin /usr/bin | sort | uniq | grep zip
这个例子,使用管道联结了四个命令,其中grep使用了选项。
七、显示输出的前后部分
显示输出的前面5行:
$ Is /usr/bin | head -n 5
显示输出的后面5行:
$ Is /usr/bin | tail -n 5
八、将tee命令用在管道中
tee命令,它接收标准输入并输出到标准输出中去。tee命令最好用在管道中。这样,它接收前面命令的输出,并向下传送。看下面的例子:
$ Is /usr/bin | tee ls.txt | grep zip
ls的输出结果被送到tee,其将它复制到ls.txt中,同时送给grep作为输入。因此上面的由管道联结的命令组将/usr/bin的文件信息复制到文件ls.txt中,同时将其中含有zip的行显示在屏幕上。
网友评论