web-dev-qa-db-fra.com

Compter le nombre total de correspondances avec grep au lieu du nombre de lignes correspondant

Est-ce que grep offre un moyen de compter le nombre total de correspondances qu'il fait? L'option -c ne renvoie que le nombre de lignes correspondant à l'expression régulière, mais dans ce cas, j'ai plusieurs correspondances par ligne.

28
William

essaye ça:

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

bien, -E est juste un exemple, ça pourrait être -P, -F etc. le point est -o

tester:

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

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

Il y a un indicateur -o qui indique que seule la sous-section correspondante de la ligne doit être imprimée.

Utilisez cela en conjonction avec wc -l:

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

man grep l'explique également.

8
chown

Comme alternative aux autres réponses, utilisez simplement grep:

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

Le -o dans le premier grep sort chaque correspondance, et seulement la correspondance - pas la ligne entière (à moins que la ligne entière IS la correspondance, bien sûr). Le -c dans le second grep les compte alors.

C'est un peu plus de caractères à taper (comme, 4 ou 5), mais je trouve plus facile de se rappeler.

1
Self Evident