Estás cerca. Para obtener un recuento total de todas las ocurrencias de "ha" dentro de todos los archivos .txt en una carpeta:
grep -o "ha" *.txt | wc -l
Desde man grep
:
-o, --only-matching
Print only the matched (non-empty) parts of a matching line, with
each such part on a separate output line.
Esto funciona porque cada coincidencia se imprime en una línea separada, lo que permite wc -l
para contarlos todos.
Sin embargo, de forma predeterminada, grep solo encuentra la primera aparición en una línea y genera la línea completa. Asimismo, la opción -c
solo encuentra la primera ocurrencia en todas las líneas, luego muestra cuántas líneas tenían 1 (o más) coincidencias.
EDITAR:
Aquí hay una forma de imprimir el número total de ocurrencias dentro de cada archivo individual (con nombres de archivo):
find *.txt -printf 'echo "$(grep -o "ha" %p | wc -l) %p";' | sh
#Example output
3 file1.txt
1 file2.txt
Explicación:
find *.txt
- encuentra archivos .txt
-printf
- imprime todo entre las comillas simples (formateadas) en la salida estándar, reemplazando las apariciones de %p
con la salida de find (nombres de archivo)
$(grep -o "ha" %p | wc -l)
- funciona como arriba
| sh
- la salida de -printf
(que son comandos) se canalizan a un shell y se ejecutan
Tenga en cuenta que printf se invoca una vez por nombre de archivo.
En lugar de usar grep
, intenta usar ag -c ha
Buscador de plata:
1.txt:3
2.txt:1
¡Es más rápido! Si está utilizando ubuntu, puede instalar el paquete silversearcher-ag
.