Ao pesquisar o número de ocorrências de uma string em um arquivo, geralmente uso:
grep pattern file | wc -l
No entanto, isso só encontra uma ocorrência por linha, devido à maneira como o grep funciona. Como posso pesquisar o número de vezes que uma string aparece em um arquivo, independentemente de estarem na mesma linha ou em linhas diferentes?
Além disso, e se eu estiver procurando um padrão regex, não uma string simples? Como posso contá-los ou, melhor ainda, imprimir cada correspondência em uma nova linha?
grep -o foo a.txt b.txt | sort | uniq -c
funciona bem (com GNU grep): gist.github.com/hudolejev/81a05791f38cbacfd4de3ee3b44eb4f8Experimente isto:
Amostra:
fonte
Uma postagem atrasada:
Use o padrão de pesquisa regex como um Separador de Registro (RS) em
awk
Isso permite que sua regex
\n
abranja linhas delimitadas (se necessário).fonte
Ripgrep , que é uma alternativa rápida para grep, acaba de introduzir o
--count-matches
sinalizador que permite contar cada correspondência na versão 0.9 (estou usando o exemplo acima para permanecer consistente):Conforme solicitado pelo OP, ripgrep permite o padrão regex também (
--regexp <PATTERN>
). Também pode imprimir cada correspondência (linha) em uma linha separada:fonte
Hackeie a função de cor do grep e conte quantas marcas de cor ele imprime:
fonte