Eliminar el nombre del archivo al contar recursivamente el número de apariciones de un patrón

Eliminar el nombre del archivo al contar recursivamente el número de apariciones de un patrón

Cuando ejecuto mi comando grep:

grep -rc 'PATTERN' .

imprime el número de líneas que aparece el patrón, pero se ve así:

./hotel_232424.dat:234

etcétera...

¿Cómo quitaría la ./hotel_232424.dat:pieza e simplemente imprimiría el número?

Respuesta1

Con la implementación GNU de grep, tienes la opción -h/ --no-filenamepara eso.

$ grep -rc PATTERN .
./b:1
./a:0
./1/2/c:2
$ grep -rhc PATTERN .
1
0
2

El equivalente portátil/estándar sería:

$ find . -type f -exec grep -c PATTERN {} \;
0
2
1

pero significaría ejecutar una grepinvocación por archivo.

Si, en cambio, desea el número total de ocurrencias (1+2 = 3 aquí), puede hacer (de forma portátil):

$ find . -type f -exec cat {} + | grep -c PATTERN
3

(tenga en cuenta que si algunos de los archivos tienen datos después de su última línea (es decir, archivos que no son de texto), eso podría estropear el resultado)

O con un grepsoporte -rcomo el tuyo:

$ grep -r PATTERN . | wc -l
3

información relacionada