grep 什么时候计数,什么时候不计数

grep 什么时候计数,什么时候不计数

手册页grep说:

-c, --count: 抑制正常输出;相反,打印每个输入文件的匹配行数。

给定:

# grep -R -c sleeping /proc/*/status

我得到一个列表,而不是计数(如下):

# grep -R sleeping /proc/*/status | wc -l

怎么了grep -c?我在做什么(在上面的命令中)不从中获取计数而不得不使用wc -l)?

答案1

grep -c分别给出每个输入文件的匹配行数(这就是您在手册中引用的内容,真的):

$ grep -c user chmod.1 chown.1 
chmod.1:20
chown.1:5

所以chmod.1有20场比赛,chown.1有5场。

文件名列表在这里的工作方式与普通 grep 类似,即如果有多个输入文件,则列出文件名,但如果只有一个输入文件,则不会列出文件名。至少在 GNU grep 中,可以使用-H-h标志进行修改。

所以,

$ grep -c user chmod.1
20
$ grep -cH user chmod.1
chmod.1:20

答案2

对于总计数,使用也许不是那么无用的用法,cat这样grep就不会报告每个文件的计数

-bash-4.2$ cat /proc/*/status | grep -c sleeping
171
-bash-4.2$ grep sleeping /proc/*/status | wc -l
171
-bash-4.2$ 

相关内容