Zählung der Gesamtzahl der Übereinstimmungen mit grep anstelle der Anzahl der übereinstimmenden Zeilen

29

Bietet grep eine Möglichkeit, die Gesamtzahl der Übereinstimmungen zu zählen? Die Option -c gibt nur die Anzahl der Zeilen zurück, die mit dem regulären Ausdruck übereinstimmen. In diesem Fall habe ich jedoch mehrere Übereinstimmungen pro Zeile.

Wilhelm
quelle

Antworten:

29

Versuche dies:

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

Nun, -E ist nur ein Beispiel, es könnte -P, -F usw. sein. point is -o

Prüfung:

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
quelle
8

Es gibt ein -o-Flag, das angibt, dass nur der übereinstimmende Unterabschnitt der Zeile gedruckt werden soll.

Verwenden Sie das in Verbindung mit wc -l:

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

Mann grep erklärt es auch.

chown
quelle
1

Als Alternative zu den anderen Antworten verwenden Sie einfach grep:

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

Das -o im ersten grep gibt jede Übereinstimmung und nur die Übereinstimmung aus - nicht die gesamte Zeile (es sei denn, die gesamte Zeile ist natürlich die Übereinstimmung). Das -c im zweiten grep zählt sie dann.

Es müssen noch ein paar Zeichen eingegeben werden (z. B. 4 oder 5), aber ich finde es einfacher, mich zu erinnern.

Selbstbewusst
quelle