Linux 管道符号 | (pipe) 二三事

管道符 |

没错,只是一条竖线而已。它可以将它左边命令的输出结果放到它右边的命令里作为输入参数。

command1 | command2 | command3

注:管道命令必须能够接受来自前一个命令的数据成为 standard input (STDIN 标准输入)继续处理。

例1:
ping 命令的帮助信息中, 找到带有 timeout 关键字的 行

ping --help | grep "timeout"

output:

[-w timeout] [-R] [-S srcaddr] [-c compartment] [-p]
-w timeout     Timeout in milliseconds to wait for each reply.

PS:

grep 命令分析一行信息,如果有匹配的,就将该行拿出来。
用法可参考 Linux 可用于管道操作的命令 中的 grep 部分

例2:
echo 的输出 创建 文件夹名

echo  foo  | mkdir

会报错。

echo  foo  | xargs mkdir

这样就可以了

原因:

有些命令是不接受管道传参 的, 有些 命令是接受管道传参

不接受管道传参: echo mkdir

接受管道传参: grep

通过 xargsechoSTDOUT (标准输出) 转成 命令行参数 传给了 mkdir, 这样就创建了 foo 文件夹。

  1. xargs 原理图

    xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。

  2. 什么是 STDIN STDOUT STDERR ?

    大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端。一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。

    准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)

    摘自: Shell 输入/输出重定向

参考

Linux命令大全(手册)
linux之xargs使用技巧
Linux xargs 命令

Linux grep 命令
Linux 可用于管道操作的命令 #grep

posted @ 2021-11-26 16:40  暗恋桃埖源  阅读(665)  评论(0编辑  收藏  举报