Isso é esperado.
grep -r -n
executará uma grep
recursiva, exibindo as linhas que correspondem ao padrão fornecido, prefixadas com o nome do arquivo e o número da linha. Ele fornecerá todas as linhas que tiverem correspondência em cada arquivo.
-n
Each output line is preceded by its relative line number in the file, starting at line 1. The line number counter is reset for each file processed.
grep -r -c
executará um grep
recursivo, exibindo os nomes de arquivos de todos os arquivos considerados, seguido pelo número de correspondências do padrão nesse arquivo. Ele te dará uma linha para cada arquivo.
-c
Only a count of selected lines is written to standard output.
Para obter o número de correspondências de um padrão em qualquer arquivo em um diretório específico (recursivamente), você pode fornecer o resultado de grep -r
a wc -l
como sugerido na resposta que você link para :
$ grep -r 'pattern' . | wc -l
Para usar somente grep
para conseguir isso:
$ grep -r 'pattern' . | grep -c 'pattern'
Embora seja certamente um exagero empregar um mecanismo de expressão regular para este trabalho quando usar wc
para contar novas linhas é "a ferramenta certa para o trabalho".
Observe que também há o sinal -o
to grep
:
-o
Print each match, but only the match, not the entire line.
Isso pode ser útil se você quiser contar cada correspondência individual em cada linha separadamente:
$ grep -r -o 'pattern' . | wc -l
Compare, por exemplo, as seguintes duas invocações grep
(em bash
ou ksh93
):
$ grep 'l' <<<"Hello world!" | wc -l
1
$ grep -o 'l' <<<"Hello world!" | wc -l
3