Estoy tratando de obtener el número de coincidencias (en este caso, ocurrencias de {o }) en cada línea de un archivo .tex.
Sé que la -obandera solo devuelve la coincidencia, pero devuelve cada coincidencia en una nueva línea, incluso combinada con la -nbandera. No sé de nada con lo que pueda canalizar esto para contar las repeticiones. La -cbandera solo devuelve el número total de coincidencias en todo el archivo, ¿tal vez podría canalizar una línea a la vez para grep?

sortes estrictamente necesario ya que la salida de grep está ordenada por número de línea, pero supongo que es una buena práctica antesuniq.regexporque la expresión regular es la parte fácil.sort -n? ¿No sale en orden de número de línea de todos modos?sort -nno es necesario. Gracias.Después de leer varias soluciones, creo que este es el enfoque más fácil para el problema:
fuente
grep -o "matchingString" <<< $i | wc -l.¿Está usando
grepun requisito? Aquí hay una alternativa:sed 's / [^ {}] // g' tu_archivo | awk '{print NR, length}'Las
sedtiras fuera todos los caracteres distintos de{y}(es decir, dejando sólo{y}caracteres), y luego losawkcuenta los caracteres en cada línea (que son sólo las{y}caracteres). Para suprimir líneas sin coincidencias,sed 's / [^ {}] // g' tu_archivo | awk '/./ {print NR, length}'Tenga en cuenta que mi solución asume (requiere) que las cadenas que está buscando son caracteres individuales. La respuesta de Moebius se adapta más fácilmente a cadenas de caracteres múltiples. Además, ninguna de nuestras respuestas excluye las ocurrencias citadas o escapadas de los caracteres / cadenas de interés; p.ej,
se consideraría que contiene cuatro caracteres de llaves.
fuente
grepen realidad no era un requisito, fue justo donde comencé a buscar una solución, porque me dio algo cercano. Nunca he tenido necesidad de awk, así que si no hubiera usado la respuesta anterior, habría usado esto como una oportunidad para experimentar, todavía puedo. Lo que no pude dejar claro (pero no afecta a ninguna de las respuestas) es que quería ejecutar el script una vez por paréntesis, para ayudarme a rastrear una falta de coincidencia (en la fuente LaTeX, aquí para una tabla) donde ocurren la mayoría de los pares en Una sola línea.sed 's/{[^{}]*}//g' your_file | grep –n '[{}]', donde lassedtiras se emparejan. Si tiene pares anidados, usesed 's/{[^{}]*}//g;s/{[^{}]*}//g;s/{[^{}]*}//g;…' …, repitiendos/{[^{}]*}//gtantas veces como su anidación más profunda.