如何在Unix或Linux中使用管道?

2021年4月13日09:32:03 发表评论 865 次浏览

管道是一种重定向(将标准输出传输到其他目标)的形式, 在Linux和其他类似Unix的操作系统中使用该管道将一个命令/程序/过程的输出发送到另一命令/程序/过程进行进一步处理。 Unix/Linux系统允许命令的标准输出连接到另一个命令的标准输入。你可以使用竖线字符来做到这一点‘|’.

管道用于合并两个或多个命令, 在这种情况下, 一个命令的输出充当另一命令的输入, 该命令的输出可能充当下一命令的输入, 依此类推。它也可以可视化为两个或多个命令/程序/进程之间的临时连接。进行进一步处理的命令行程序称为过滤器。

命令/程序/过程之间的这种直接连接使它们可以同时运行, 并允许数据在它们之间连续传输, 而不必通过临时文本文件或显示屏传递数据。

管道是单向的,即数据通过管道从左到右流动。

句法 :

command_1 | command_2 | command_3 | .... | command_N

示例:

1.列出所有文件和目录, 并将其作为更多命令的输入。

$ ls -l | more

输出:

如何在Unix或Linux中使用管道?1

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

输出:

如何在Unix或Linux中使用管道?2

上面两个命令的输出是相同的。

2.使用sort and uniq命令对文件进行排序并打印唯一值。

$ sort record.txt | uniq

这将给定文件排序并仅打印唯一值。

输出:

如何在Unix或Linux中使用管道?3

3.使用头和尾在文件中的特定范围内打印行。

$ cat sample2.txt | head -7 | tail -5

此命令通过(head -7)命令选择前7行, 并将其输入到(tail -5)命令, 该命令最终将从那7行中打印最后5行。

输出:

如何在Unix或Linux中使用管道?4

4.使用ls和find列出并打印匹配文件中与特定模式匹配的所有行。

$ ls -l | find ./-type f -name "*.txt" -exec grep "program" {} \;

该命令选项带有。文本文件在给定目录中扩展名, 并在上述示例中搜索" program"之类的模式, 并打印其中包含程序的ine。

输出:

如何在Unix或Linux中使用管道?5

5.使用cat, grep, tee和wc命令从用户读取特定条目, 并将其存储在文件中并打印行数。

$ cat result.txt | grep "Rajat Dua" | tee file2.txt | wc -l

该命令选择,并将它们存储在file2.txt中, 并打印匹配的总行数

输出:

如何在Unix或Linux中使用管道?6

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: