如何在 Linux 中将命令输出通过管道传输到其他命令
使用命令行时,您可以使用管道直接将一个程序(例如,生成某些系统信息或统计信息的工具)的输出作为另一个程序(例如,文本过滤或模式搜索工具,如grep、sed或awk,以进行进一步处理)的输入。
[ 你可能还喜欢:了解 Linux I/O(输入/输出)重定向的工作原理的基础知识]
可以与管道一起用于构建命令行的两个最重要的命令行实用程序是:
在 Linux 中将命令输出发送到另一个命令
在这篇简单的文章中,我们将描述如何在 Linux 中使用管道、tee和xargs命令从标准输入构建和执行多个命令。
使用管道的最简单语法(您可能已经在我们的许多 Linux 教程中的命令中看到过)如下。但您可以使用多个 Linux 命令构建更长的命令行。
$ command1 args | command2 args OR # command1 args | command2 args | command3 args ...
下面是使用管道将dmesg 命令的输出传递给head 命令的示例。
$ dmesg | head
Xargs – 将命令输出传递给其他命令
在这个例子中,ls 命令输出将传递给另一个名为xargs的命令,该命令将多行输出连接为一行,如下所示。
$ ls -1 *.sh $ ls -1 *.sh | xargs
要计算列表中每个文件的行数/单词数/字符数,请使用以下命令。
$ ls *.sh | xargs wc -l #count number of lines in each file $ ls *.sh | xargs wc -w #count number of words in each file $ ls *.sh | xargs wc -c #count number of characters in each file $ ls *.sh | xargs wc #count lines, words, and characters in each file
下面的命令查找并递归删除当前目录中命名的目录。All
$ find . -name "All" -type d -print0 | xargs -0 /bin/rm -rf "{}"
带有选项操作的find 命令可以-print0
在标准输出上打印完整的目录路径,后跟空字符和-0 xargs
标志(用于处理文件名中的空格)以及用于删除目录的rm -rf 命令。
您可以在这些文章中找到其他实用的xargs 命令使用示例:
Tee – 将命令输出发送到其他命令并保存到文件
此示例显示如何将命令输出发送到标准输出并将其保存到文件;下面的命令允许您查看Linux 中内存和 CPU 使用率最高的顶级运行进程。
$ ps -eo cmd,pid,ppid,%mem,%cpu --sort=-%mem | head | tee topprocs.txt $ cat topprocs.txt
要将数据附加到现有文件中,请传递-a
标志。
$ ps -eo cmd,pid,ppid,%mem,%cpu --sort=-%mem | head | tee -a topprocs.txt
您可以在tee和xargs手册页上找到更多信息。
$ man xargs $ man tee
就这些!别忘了查看我们的特别文章:A – Z Linux 命令 – 概述和示例。
在本文中,我们描述了如何使用管道、xargs和tee命令生成命令行。您可以通过下面的反馈表提出任何问题或分享任何想法。