cat 文件并通过管道传输到 grep 的优点

cat 文件并通过管道传输到 grep 的优点

除了方便之外,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 非常小,如果您在不需要时使用它,它不会使您的计算机崩溃。

通常情况下,使用catvs 直接单击文件不会改变任何内容,但对于某些关心是否有多个文件作为参数的命令,它确实会产生影响,例如grep。举个例子:

cat file1 file2 | grep SOMETHING

输出将不同于

grep SOMETHING file1 file2

输出中将包含匹配的文件名。有时我不想要文件名,使用 是一个优势cat

答案3

没什么优势。如果你像这样构造,那么光标位于末尾也没关系:< inputfile grep -args foo

答案4

易于编辑是唯一真正的优势,如果您在命令行上执行此操作,则运行cat和执行管道所花费的任何额外时间都不会产生任何影响。

但是,没有理由在 shell 脚本中执行此操作。

相关内容