cuenta el número de líneas en la salida del terminal

265

No pude encontrar esto en SO. Ejecuté el siguiente comando en la terminal:

>> grep -Rl "curl" ./

y esto muestra la lista de archivos donde aparece la palabra clave curl. Quiero contar la cantidad de archivos. La primera forma en que puedo pensar es contar el número de líneas en la salida que vino en la terminal. ¿Cómo puedo hacer eso?

roopunk
fuente
40
grep también tiene la -cbandera que solo devuelve el recuento
EaterOfCode
Relacionado: unix.stackexchange.com/questions/248245/…
AlikElzin-kilaka

Respuestas:

476

Canalice el resultado al wcuso del interruptor -l( recuento de líneas ):

grep -Rl "curl" ./ | wc -l
João Silva
fuente
1
He estado usando, grep "" -cpero esto es mucho mejor :)
ninhenzo64
3
Cabe señalar que este truco de tubería a wc funcionará para cualquier salida, no solo para grep. Por ejemplo, se puede combinar con un git diff.
Jason L.
1
¿Por qué es esta la respuesta aceptada? Como algunos comentarios mencionaron, la función de compilación grep -cdebería usarse en lugar de canalizar la salida a otro programa. Por ejemplo, incluso no cambiaría los caracteres en su documento de Word con otro editor de texto que Word, ¿verdad?
Michael P
57

Poniendo el comentario de EaterOfCode aquí como respuesta.

grep también tiene la bandera -c que solo devuelve el conteo

Entonces el comando y la salida podrían verse así.

$ grep -Rl "curl" ./ -c
24

EDITAR:

Aunque esta respuesta puede ser más corta y, por lo tanto, puede parecer mejor que la respuesta aceptada (que está usando wc). Ya no estoy de acuerdo con esto. Tengo ganas de recordar que puedes contar las líneas canalizando wc -les mucho más útil, ya que también puedes usarlo con otros programas grep.

JelteF
fuente
5

La canalización a 'wc' podría ser mejor SI la última línea termina con una nueva línea (sé que en este caso, lo hará)
Sin embargo, si la última línea no termina con una nueva línea 'wc -l' devuelve un resultado falso.

Por ejemplo:

$ echo "asd" | wc -l

Volveremos 1y

$ echo -n "asd" | wc -l

Volveremos 0


Entonces, lo que uso a menudo es grep <anything> -c

$ echo "asd" | grep "^.*$" -c
1

$ echo -n "asd" | grep "^.*$" -c
1

Esto está más cerca de la realidad de lo wc -lque volverá.

GCS
fuente