cat'ing 文件和管道到 grep 的优点

Dex*_*gen 21 linux unix grep command-line pipe

除了方便之外,对文件进行分类并将其通过管道传送到 grep 是否还有其他优势?方便之处在于,当我从历史记录中检索如下命令时,光标位于行尾,因此很容易修改具有不同文本的命令以针对同一文件进行 grep。

那么以下约定还有哪些其他优点:

cat /var/tmp/trace.2043925204.xt | grep -in profile
cat /var/tmp/trace.2043925204.xt | grep -n Profile-Main
Run Code Online (Sandbox Code Playgroud)

代替:

grep -in profile /var/tmp/trace.2043925204.xt 
grep -n Profile-Main /var/tmp/trace.2043925204.xt 
Run Code Online (Sandbox Code Playgroud)

Phi*_*ilR 23

最好避开猫;如果行编辑很重要,请这样写:

$ < filename grep pattern

原因是通过 cat 推送所有数据会消耗内存和 CPU 资源。将文件名作为参数传递而不是重定向 stdin 的另一个好处是它允许命令选择 mmap() 文件。


Ric*_*lka 11

我不能相信没有人引用的“无用的使用猫” http://www.smallo.ruhr.de/award.html

有一个值得怀疑的优势。如果你有一个很长的管道,它看起来与 cat 更正交:

cat file | command1 | command 2 | command3
Run Code Online (Sandbox Code Playgroud)

它将所有命令聚集在一起。

当然正如其他人所说的(我也是)

< file command1 | command2 | command3
Run Code Online (Sandbox Code Playgroud)

执行几乎相同的事情。也就是说, cat 非常小,如果您在不需要的时候使用它,它不会使您的计算机停机。

通常使用catvs 直接点击文件不会改变任何东西,但它确实对某些关心是否有多个文件作为参数的命令有所不同,例如grep. 案例:

cat file1 file2 | grep SOMETHING
Run Code Online (Sandbox Code Playgroud)

将有不同的输出

grep SOMETHING file1 file2
Run Code Online (Sandbox Code Playgroud)

这将在输出中具有匹配的文件名。有时我不想要文件名,使用cat.

  • `cat` 比 `&lt;` 更容易阅读。或者也许只是对于我们这些认为 Unix 和 bash 可以从 VMS 和 DCL 学到很多东西的老顽固来说。 (2认同)

Dae*_*yth 8

没有优势。如果你这样构造它,你的光标在最后也没有多大关系:< inputfile grep -args foo


dog*_*ane 6

在这种情况下,您根本不需要使用 cat 。这是不必要的,而且是浪费时间,因为 grep 等工具将文件名作为参数。

[root@un1xf00 root]# time cat passwd | grep root
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

real    0m0.021s
user    0m0.000s
sys     0m0.030s
[root@un1xf00 root]# time grep root passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

real    0m0.002s
user    0m0.000s
sys     0m0.000s
[root@un1xf00 root]#
Run Code Online (Sandbox Code Playgroud)

更新:谢谢@Andy Lester 指出这些时间没有考虑磁盘缓存。我学到了新东西!但无论如何,节省几分之一秒并没有太大区别。我只是认为将 cat 管道化为 grep 不是一种合乎逻辑的做事方式。这就像在您完全有能力自己解决问题时,请别人帮助您解决问题。

  • Michael 说上面的时间没有考虑磁盘缓存。(还有-0.29 给丹尼斯,因为他更有兴趣抨击迈克尔而不是消除回复的迟钝) (4认同)