我正在寻找有关如何使用管道将标准输出作为其他命令的参数传递的见解。
例如,考虑这种情况:
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/