Kun*_*Kun 3 command-line grep cat
比较以下命令:
cat f.txt | grep "someText"
grep "someText" f.txt
Run Code Online (Sandbox Code Playgroud)
他们两个似乎都有效。但是 cat 的文档说 cat 输出文件的内容而不是文件名,并且 grep 命令采用文件名而不是文件内容(如果我错了,请纠正我),那么为什么第一个命令可以工作,因为它正在为 grep 提供文件内容而不是文件名。
另一个问题:它们都有效,但为什么要使用第一行而不是第二行,第一行只是多余的?
在你的第一个例子中
cat f.txt | grep "someText"
Run Code Online (Sandbox Code Playgroud)
grep
没有得到文件名参数,只有一个要搜索的字符串。在这种情况下grep
,将从标准输入读取要搜索的文本。在这种情况下,标准输入从 的输出通过管道输入cat f.txt
,输出文件的内容而不是文件名。
您还可以grep
使用以下方法从 stdin 读取:
< f.txt grep "someText"
Run Code Online (Sandbox Code Playgroud)
使用cat
本身通常是多余的(独立于grep
),并且可以用上面的输入重定向替换。在您的示例中,我将始终使用第二种形式,除非您必须对输入进行一些预处理。