整理文件和管道到grep的优点


19

除了方便之外,将文件编入目录并将其通过管道传递到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 

Answers:


21

最好避免猫;如果行编辑很重要,可以这样写:

$ < filename grep pattern

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


9

我不能相信没有人引用的“无用的使用猫” 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


1
cat<。清晰得多。也许只是对我们这些迷信的人来说,他们认为Unix和bash可以从VMS和DCL中学到很多东西。
罗恩·约翰

8

没有优势。如果将游标放在下面,则光标位于最后也无所谓:< inputfile grep -args foo


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]#

更新:@Andy Lester,感谢您指出这些时间未考虑磁盘缓存。我学到了新东西!但是,节省一秒钟的时间并没有多大区别。我只是认为将cat引入grep并不是一种合理的做法。这就像在您完全有能力自己解决问题时要求其他人帮助您解决问题。


1
@Michael:对你来说太钝了-10。您本可以提供更多帮助。太可惜了,因为您在这里没有帐户,所以看不到此内容。
暂停,直到另行通知。

4
迈克尔说,上述时间并未考虑磁盘缓存。(以及-0.29,对丹尼斯而言,他对打败迈克尔比对回复的要求更感兴趣)
安迪·莱斯特

1
我想如果一定要有噪音而不是发出声音,那么评论就是它的地方。感谢@Andy,因为我不知道Michael是指磁盘缓存。
George Jempty

3

易于编辑是唯一的真正优势,如果您在命令行中进行操作,那么运行cat和执行管道所花费的任何额外时间都不会真正起作用。

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



1

不,在您给出的示例中,它甚至可能会稍慢一些。

pipe在cat和grep之间创建一个A ,将文件名直接传递给grep时不需要。但是,我认为在任何情况下您都不会因此而受到吞吐量限制。

将输入管道传送到grep的其他优点包括事先进行了额外的处理,例如使用具有更高级文件读取功能的实用程序。(请参阅tee,,zcat以及其他内容)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.