命令参数的 Unix 管道

标签 unix io pipe

我正在寻找有关如何使用管道将标准输出作为其他命令的参数传递的见解。

例如,考虑这种情况:

ls | grep Hello

grep 的结构遵循以下模式:grep SearchTerm PathOfFileToBeSearched .在我举例说明的情况下,Hello 一词被视为 SearchTerm并且 ls 的结果用作要搜索的文件。但是如果我想切换它呢?如果我希望 ls 的标准输出是 SearchTerm,grep 后面的参数是 PathOfFileToBeSearched 怎么办? ?一般来说,我想控制管道用前一个命令的标准输出填充哪个参数。这是可能的,还是取决于命令的脚本(例如, grep )是如何编写的?

非常感谢你的帮助!

最佳答案

grep本身将被构建,如果您没有指定文件名,它将打开标准输入(从而获得 ls 的输出)。这里没有真正的通用机制——只是约定。

如果你想要 ls 的输出要成为搜索词,您可以通过 shell 执行此操作。使用子shell和substitution因此:

$ grep $(ls) filename.txt

在这种情况下 ls在子shell中运行,它的标准输出被捕获并作为grep的参数插入到命令行中。 .注意,如果 ls输出包含空格,这会导致 grep 的混淆.

关于命令参数的 Unix 管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14383534/

相关文章:

c - 将一个命令的输出管道化为另一个命令的输入

sockets - 我应该在哪个时刻使用哪种进程间通信(ipc)机制?

python - 使用管道将数据从 c 程序发送到 python 程序?

c - 在 C 的自定义 shell 中执行重定向( ">"和 "<")

linux - 使用 shell 脚本将两个命令的输出合并到一个表中

bash - 用特定字符填充行,直到它包含给定数量的字符

C - 给定一个不区分大小写的文件路径,如何检查文件是否存在?

io - 在 Rust 中逐个字符地读取文件

linux - 比较磁盘分区中的两个值,发送 80% 阈值的警报

C 程序验证错误和跳过用户输入