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 。这是不必要的,而且是浪费时间,因为 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 不是一种合乎逻辑的做事方式。这就像在您完全有能力自己解决问题时,请别人帮助您解决问题。
| 归档时间: |
|
| 查看次数: |
43753 次 |
| 最近记录: |