管道符与重定向存在一定共性,都是讲输出结果的方向进行操作
背景
如果想查看 tree 输出结果的头几行,可以有如下操作
tree ~/ > tree.txt
head tree.txt显然,操作中的 tree.txt 有些多余,于是便可使用管道符 |
tree ~/ | head也就是说,| 将 tree 命令与 head 命令相连,让前者的输出数据直接流入 后者 ,作为输入数据
Tips
这相当于将输出结果重定向 至下一个命令
用于加深理解的例子
先创建一个示例文件
zhoux@westnorth:~$ echo -e 1\\n2\\n3\\n4\\n5 > alpha.txt
zhoux@westnorth:~$ cat alpha.txt
1
2
3
4
5那么我们如何提取第 3、4 行呢?在仅使用 head 和 tail 时可以这样做
head -4 alpha.txt | tail -2 > ~/beta.txt
cat ~/beta.txt
#先读取前4行,再读取前4行的后两行,最后将结果重定向至beta.txt查看
#很好玩吧先读取前 4 行,再读取前 4 行的后两行,最后将结果重定向至 beta. txt 查看
特点 1:管道符只传递标准输出
管道符内流动的只能是标准输出,(在输出内容的选择中提及),不能直接连接不接受标准输出的命令
例子如下
zhoux@westnorth:~$ ls ./linux_copy/ | rm
rm: missing operand
Try 'rm --help' for more information.可见,rm 无法读取 ls 的输出
Warning
使用
xargs rm可以让rm读取ls的结果,然而,ls只会依次输出文件名,如果不在当前目录下,rm仍然无法根据只根据文件名进行删除,而必须要使用完整的相对/绝对路径,见注意点