Cuando busco el número de ocurrencias de una cadena en un archivo, generalmente uso:
grep pattern file | wc -l
Sin embargo, esto solo encuentra una ocurrencia por línea, debido a la forma en que trabaja grep. ¿Cómo puedo buscar la cantidad de veces que aparece una cadena en un archivo, independientemente de si están en la misma línea o en líneas diferentes?
Además, ¿qué pasa si estoy buscando un patrón de expresiones regulares, no una simple cadena? ¿Cómo puedo contarlos o, mejor aún, imprimir cada coincidencia en una nueva línea?
grep -o foo a.txt b.txt | sort | uniq -c
funciona bien (con GNU grep): gist.github.com/hudolejev/81a05791f38cbacfd4de3ee3b44eb4f8Prueba esto:
Muestra:
fuente
Una publicación tardía:
use el patrón de expresión regular de búsqueda como un Separador de registros (RS) en
awk
Esto permite que su expresión regular
\n
abarque líneas delimitadas (si lo necesita).fuente
Ripgrep , que es una alternativa rápida a grep, acaba de introducir la
--count-matches
bandera que permite contar cada coincidencia en la versión 0.9 (estoy usando el ejemplo anterior para mantener la coherencia):Según lo solicitado por OP, ripgrep también permite el patrón de expresiones regulares (
--regexp <PATTERN>
). También puede imprimir cada coincidencia (línea) en una línea separada:fuente
Hackea la función de color de grep y cuenta cuántas etiquetas de color imprime:
fuente