Contando o número total de correspondências com grep em vez de quantas linhas correspondem

29

O grep oferece uma maneira de contar o número total de correspondências que ele faz? A opção -c retorna apenas o número de linhas que correspondem à regex, mas, neste caso, tenho várias correspondências por linha.

William
fonte

Respostas:

29

tente isto:

grep -o -E "your expression" file |wc -l

bem, -E é apenas um exemplo, poderia ser -P, -F etc. ponto é -o

teste:

kent$  echo "abc xxx yyy"|grep -cP "[a-z]{3}"      
1

kent$  echo "abc xxx yyy"|grep -oP "[a-z]{3}"|wc -l
3
Kent
fonte
8

Há um sinalizador -o que indica que apenas a subseção correspondente da linha deve ser impressa.

Use isso em conjunto com wc -l:

grep -o "part of line" | wc -l

o homem grep também explica.

chown
fonte
1

Como alternativa às outras respostas, usando apenas grep:

grep -o "seach pattern" somefile.txt | grep -c ""

O -o no primeiro grep gera cada partida, e apenas a partida - não a linha inteira (a menos que a linha inteira seja a partida, é claro). O -c no segundo grep os conta.

São mais alguns caracteres para digitar (como 4 ou 5), mas acho mais fácil lembrar.

Auto-evidente
fonte