管道是一种重定向(将标准输出传输到其他目标)的形式, 在Linux和其他类似Unix的操作系统中使用该管道将一个命令/程序/过程的输出发送到另一命令/程序/过程进行进一步处理。 Unix/Linux系统允许命令的标准输出连接到另一个命令的标准输入。你可以使用竖线字符来做到这一点‘|’.
管道用于合并两个或多个命令, 在这种情况下, 一个命令的输出充当另一命令的输入, 该命令的输出可能充当下一命令的输入, 依此类推。它也可以可视化为两个或多个命令/程序/进程之间的临时连接。进行进一步处理的命令行程序称为过滤器。
命令/程序/过程之间的这种直接连接使它们可以同时运行, 并允许数据在它们之间连续传输, 而不必通过临时文本文件或显示屏传递数据。
管道是单向的,即数据通过管道从左到右流动。
句法 :
command_1 | command_2 | command_3 | .... | command_N
示例:
1.列出所有文件和目录, 并将其作为更多命令的输入。
$ ls -l | more
输出:
more命令将$ ls -l的输出作为输入。该命令的最终效果是, ls -l的输出一次显示在一个屏幕上。管道充当容器, 该容器接受ls -l的输出并将其提供给更多。该命令不使用磁盘将ls -l的标准输出连接到more的标准输入, 因为管道是在主内存中实现的。
就I/O重定向运算符而言, 以上命令等效于以下命令序列。
$ ls -l -> temp
more -> temp (or more temp)
[contents of temp]
rm temp
输出:
上面两个命令的输出是相同的。
2.使用sort and uniq命令对文件进行排序并打印唯一值。
$ sort record.txt | uniq
这将给定文件排序并仅打印唯一值。
输出:
3.使用头和尾在文件中的特定范围内打印行。
$ cat sample2.txt | head -7 | tail -5
此命令通过(head -7)命令选择前7行, 并将其输入到(tail -5)命令, 该命令最终将从那7行中打印最后5行。
输出:
4.使用ls和find列出并打印匹配文件中与特定模式匹配的所有行。
$ ls -l | find ./-type f -name "*.txt" -exec grep "program" {} \;
该命令选项带有。文本文件在给定目录中扩展名, 并在上述示例中搜索" program"之类的模式, 并打印其中包含程序的ine。
输出:
5.使用cat, grep, tee和wc命令从用户读取特定条目, 并将其存储在文件中并打印行数。
$ cat result.txt | grep "Rajat Dua" | tee file2.txt | wc -l
该命令选择,并将它们存储在file2.txt中, 并打印匹配的总行数
输出: