美文网首页每天写500字每天写1000字
linux命令行学习(16):管道(pipeline)

linux命令行学习(16):管道(pipeline)

作者: 金石明镜 | 来源:发表于2019-10-15 17:08 被阅读0次


    一、管道及使用

    管道是一种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的行显示在屏幕上。

    相关文章

      网友评论

        本文标题:linux命令行学习(16):管道(pipeline)

        本文链接:https://www.haomeiwen.com/subject/okgsmctx.html