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

29

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

William
la source

Réponses:

29

essaye ça:

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

eh bien, -E n'est qu'un exemple, cela 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
Kent
la source
8

Un indicateur -o indique que seule la sous-section correspondante de la ligne doit être imprimée.

Utilisez-le en conjonction avec wc -l:

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

man grep l' explique aussi.

chown
la source
1

Comme alternative aux autres réponses, en utilisant juste grep:

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

Le -o dans le premier grep génère chaque correspondance, et juste la correspondance - pas la ligne entière (sauf si la ligne entière EST la correspondance, bien sûr). Le -c dans le deuxième grep les compte ensuite.

Il y a encore quelques caractères à taper (comme 4 ou 5), mais je trouve cela plus facile à retenir.

Évident
la source