📜  Unix 或 Linux 中的管道

📅  最后修改于: 2022-05-13 01:57:34.174000             🧑  作者: Mango

Unix 或 Linux 中的管道

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

管道用于组合两个或多个命令,其中一个命令的输出作为另一个命令的输入,而该命令的输出可能作为下一个命令的输入,依此类推。也可以将其可视化为两个或多个命令/程序/进程之间的临时连接。进行进一步处理的命令行程序称为过滤器。

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

句法 :

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

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



$ ls -l | more 

输出 :

more 命令将 $ ls -l 的输出作为其输入。此命令的最终效果是 ls -l 的输出一次显示一屏。管道充当容器,它接受 ls -l 的输出并将其作为输入提供给 more。此命令不使用磁盘将 ls -l 的标准输出连接到 more 的标准输入,因为管道是在主内存中实现的。
在 I/O 重定向运算符,上面的命令等价于下面的命令序列。

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

输出 :

上面两条命令的输出是一样的。

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

$ sort record.txt | uniq 

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

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

$ 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" {} \;

此命令在给定目录中选择扩展名为.txt 的文件,并在上面的示例中搜索类似“program”的模式,并打印其中包含 program 的文件。
输出 :

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

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

此命令选择Rajat Dua并将它们存储在 file2.txt 中并打印与Rajat Dua匹配的总行数
输出 :