когда 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.120 матчей, chown.15.

Список имен файлов здесь работает так же, как и в обычном 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$ 

Связанный контент