Bei der Suche nach der Anzahl der Vorkommen einer Zeichenfolge in einer Datei verwende ich im Allgemeinen:
grep pattern file | wc -l
Dies findet jedoch aufgrund der Funktionsweise von grep nur ein Vorkommen pro Zeile. Wie kann ich suchen, wie oft eine Zeichenfolge in einer Datei angezeigt wird, unabhängig davon, ob sie sich in derselben oder in verschiedenen Zeilen befindet?
Was ist auch, wenn ich nach einem Regex-Muster suche, nicht nach einer einfachen Zeichenfolge? Wie kann ich diese zählen oder, noch besser, jedes Spiel in einer neuen Zeile drucken?
grep -o foo a.txt b.txt | sort | uniq -c
funktioniert gut (mit GNU grep): gist.github.com/hudolejev/81a05791f38cbacfd4de3ee3b44eb4f8Versuche dies:
Stichprobe:
quelle
Ein verspäteter Beitrag:
Verwenden Sie das Such-Regex-Muster als Datensatztrennzeichen (RS) in
awk
Dies ermöglicht es Ihrem Regex,
\n
begrenzte Linien zu überspannen (falls erforderlich).quelle
Ripgrep , eine schnelle Alternative zu grep, hat gerade das
--count-matches
Flag eingeführt, mit dem jedes Match in Version 0.9 gezählt werden kann (ich verwende das obige Beispiel, um konsistent zu bleiben):Wie von OP gefordert, lässt ripgrep auch Regex-Muster zu (
--regexp <PATTERN>
). Außerdem kann jede (Zeilen-) Übereinstimmung in einer separaten Zeile gedruckt werden:quelle
Hacken Sie die Farbfunktion von grep und zählen Sie, wie viele Farb-Tags gedruckt werden:
quelle