为什么要使用 cat + grep、sed、awk、……

sh/bash/dash/ksh/zsh等Shell脚本
lanbird2011
帖子: 2
注册时间: 2011-10-26 12:29

Re: 为什么要使用 cat + grep、sed、awk、……

#61

帖子 lanbird2011 » 2011-10-26 12:32

poet 写了:你们争论这么多做什么呢?重要的问题在于 cat 本质是作什么的?grep对标准输入和标准输出究竟有什么不同的处理?

我在这里告诉大家,两者绝对是不同的!

cat 命令的含义是串接,也就是说 cat 的功能是把文件串接成一个文件。cat *.c 就把当前目录下的所有 .c 串接成一个文件并输出。——由于cat这个命令的用途是用于拼接,所以对于单个文件使用拼接没有意义,但是为了记忆命令的统一性,习惯性拼接没有坏处。

grep 的本质是查找,当从标准输入接收的时候,只显示查找到的匹配行,当从文件接收的时候,除了显示查找到的行还要显示文件名。——但是grep有一个很不一致的特性,就是当grep查找到的匹配行只在一个文件中时,不显示文件名,而在多个文件中时要显示文件名——这种不一致的行为导致了解析grep输出需要一些额外的判断。

使用 cat 命令能保证 grep 在匹配行上总是不输出文件名,方便了输出解析,这是好处之一。

好处之二是:管道是双进程同时运行的,在多核机器上,这能够提高效率。——之所以推荐管道是因为 Unix 起源于服务器,而服务器最初就是多CPU的,使用管道能够优化CPU使用,减轻服务器负担。

简单的说:如果使用 grep 带参数,那么读文件和处理都是一个进程。如果使用 cat 管道,那么用的是两个进程,效率更高。在多核普及的将来,绝对应当推荐尽可能的使用管道,即使认为管道是标准方式也在所不惜。


是这个帖子促使我在该论坛上注册了账号。
顶一个!
头像
Methuselar
帖子: 122
注册时间: 2009-06-04 12:06
联系:

Re: 为什么要使用 cat + grep、sed、awk、……

#62

帖子 Methuselar » 2011-10-27 15:56

我惊讶的发现我也很喜欢无意义的cat....
Mea Culpa!
头像
naturalaw
帖子: 1360
注册时间: 2011-09-06 22:04

Re: 为什么要使用 cat + grep、sed、awk、……

#63

帖子 naturalaw » 2011-11-01 22:39

習慣問題。
習慣不好改。

個人認為 ,命令之間有差异,如果出現過問題,不如直接用沒出現過問題的
  • The eternal law
回复