¿Cuándo cuenta grep y cuándo no?

¿Cuándo cuenta grep y cuándo no?

La página del manual grepdice:

-c, --count: Suprime la salida normal; en su lugar, imprima un recuento de líneas coincidentes para cada archivo de entrada.

dado:

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

Obtengo una lista, no un recuento (como ocurre con):

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

¿Qué pasa grep -c? ¿Qué estoy haciendo (en los comandos anteriores) para no contar y tener que usarlo wc -len su lugar)?

Respuesta1

grep -cda el recuento de líneas coincidentes para cada archivo de entrada por separado (eso es lo que realmente dice su cita del manual):

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

Entonces chmod.1tiene 20 coincidencias, chown.1tiene 5.

La lista de nombres de archivos funciona aquí de manera similar a un grep normal, es decir, los nombres de los archivos se enumeran si hay más de un archivo de entrada, pero no si solo hay uno. Al menos en GNU grep, esto se puede modificar con las banderas -Hy -h.

Entonces,

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

Respuesta2

Para obtener un recuento total, utilice un uso que quizás no sea tan inútil catpara que grepno informe recuentos por archivo

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

información relacionada