除了方便之外,cat 文件并将其通过管道传输到 grep 还有其他好处吗?方便之处在于,当我从历史记录中检索下面的命令时,光标位于行尾,因此很容易使用不同的文本修改命令以针对同一文件进行 grep。
那么以下约定可能还有哪些其他优点:
cat /var/tmp/trace.2043925204.xt | grep -in profile
cat /var/tmp/trace.2043925204.xt | grep -n Profile-Main
代替:
grep -in profile /var/tmp/trace.2043925204.xt
grep -n Profile-Main /var/tmp/trace.2043925204.xt
答案1
最好避免使用 cat;如果行编辑很重要,请这样写:
$ < filename grep pattern
原因是通过 cat 推送所有数据会耗费内存和 CPU 资源。将文件名作为参数传递而不是重定向 stdin 的另一个好处是,它允许命令选择 mmap() 文件。
答案2
我不敢相信没有人提到“猫的无用用途”http://www.smallo.ruhr.de/award.html然而
有一个值得怀疑的优势。如果你有一个很长的管道,它看起来与 cat 更正交一些:
cat file | command1 | command 2 | command3
它将所有命令聚集在一起。
当然,正如其他人所说(我也这么说)
< file command1 | command2 | command3
执行的操作几乎相同。也就是说,cat 非常小,如果您在不需要时使用它,它不会使您的计算机崩溃。
通常情况下,使用cat
vs 直接单击文件不会改变任何内容,但对于某些关心是否有多个文件作为参数的命令,它确实会产生影响,例如grep
。举个例子:
cat file1 file2 | grep SOMETHING
输出将不同于
grep SOMETHING file1 file2
输出中将包含匹配的文件名。有时我不想要文件名,使用 是一个优势cat
。
答案3
没什么优势。如果你像这样构造,那么光标位于末尾也没关系:< inputfile grep -args foo
答案4
易于编辑是唯一真正的优势,如果您在命令行上执行此操作,则运行cat
和执行管道所花费的任何额外时间都不会产生任何影响。
但是,没有理由在 shell 脚本中执行此操作。