手册页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$