我最近遇到了以下两个例子
示例 1:仅列出目录
ls -l | grep "^d"
示例 2:在文件内搜索
ls | xargs grep -i "Find Some String"
现在我已经读过了这里那
如果您只是使用管道,它会在 STDIN(标准输入流)上接收数据作为原始数据堆,并且可以一次对一行进行排序。
所以现在我有点困惑,为什么 grep 在第二个例子中需要 xargs,而在第一个例子中不需要。据我目前的理解,xargs 用于转换为stdin
。arguments
(因为有些程序需要参数而不是 stdin)。这是否意味着 grep 可以同时接受 stdin 和参数?如果有人能解释为什么在第二个例子中使用 xargs,我将不胜感激,为什么没有 xargs 它就不能工作?它有什么用途?
答案1
在示例 2 中,您要在 中搜索某个文本file contents
,因此您需要 xargs 将文件名传递给 grep。
在示例 1 中,您要搜索 ls 的输出,而不是文件内容。
实际上,不使用 xargs 也可以搜索文件内容,这样更好:
grep -i 'some text' *