Unix或Linux中的管道

管道是一种重定向形式(将标准输出传输到其他目的地),在Linux和其他类似Unix的操作系统中用于将一个命令/程序/进程的输出发送到另一个命令/程序/进程以进行进一步处理。Unix/Linux系统允许一个命令的stdout连接到另一个命令的stdin。可以通过使用管道角色来实现 ‘|’ .

null

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

命令/程序/进程之间的这种直接连接允许它们同时运行,并允许数据在它们之间连续传输,而不必通过临时文本文件或显示屏进行传输。 管道是单向的 i、 e数据通过管道从左向右流动。

语法:

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

例子: 1.列出所有文件和目录,并将其作为more命令的输入。

$ ls -l | more 

输出:

图片[1]-Unix或Linux中的管道-yiteyi-C++库

more命令将$ls-l的输出作为其输入。这个命令的最终效果是,ls-l的输出一次显示一个屏幕。管道充当容器,接收ls-l的输出,并将其作为输入提供给更多用户。此命令不使用磁盘将ls-l的标准输出连接到more的标准输入,因为管道是在主内存中实现的。 就I/O重定向操作符而言,上述命令相当于以下命令序列。

$ ls -l -> tempmore -> temp (or more temp)[contents of temp]rm temp

输出:

图片[2]-Unix或Linux中的管道-yiteyi-C++库

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

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

$ sort record.txt | uniq 

这将对给定文件进行排序,并仅打印唯一值。 输出:

图片[3]-Unix或Linux中的管道-yiteyi-C++库

3.使用head和tail打印文件中特定范围内的行。

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

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

图片[4]-Unix或Linux中的管道-yiteyi-C++库

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

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

此命令用于选择具有 .txt 在给定的目录中进行扩展,并在上面的示例中搜索类似“program”的模式,然后打印其中包含program的模式。 输出:

图片[5]-Unix或Linux中的管道-yiteyi-C++库

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

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

此命令用于选择 拉贾特·杜阿 并将其存储在文件2中。txt并打印匹配的总行数 拉贾特·杜阿 输出:

图片[6]-Unix或Linux中的管道-yiteyi-C++库

?list=PLqM7alHXFySFc4KtwEZTANgmyJm3NqS

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享