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
O grep oferece uma maneira de contar o número total de correspondências que faz? A opção -c só retorna o número de linhas que correspondem à regex, mas neste caso eu tenho várias correspondências por linha.
Existe um sinalizador -o que indica que somente 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 explica isso também.
Tags command-line grep regex linux unix