La página del manual grep
dice:
-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 -l
en su lugar)?
Respuesta1
grep -c
da 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.1
tiene 20 coincidencias, chown.1
tiene 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 -H
y -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 cat
para que grep
no 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$