Ich habe ein paar Protokolldateien. Ich muss herausfinden, wie oft eine Zeichenfolge in allen Dateien vorkommt.
grep -c string *
kehrt zurück
...
file1:1
file2:0
file3:0
...
Mit einer Pipe konnte ich nur Dateien abrufen, die ein oder mehrere Vorkommen haben:
grep -c string * | grep -v :0
...
file4:5
file5:1
file6:2
...
Wie kann ich nur die kombinierte Anzahl erhalten? (Wenn es zurückkommt file4:5, file5:1, file6:2
, möchte ich zurück 8.)
grep file1 file2 --options
Antworten:
quelle
grep -c string<*
also nur den Platz durch einen weniger als ersetzen.grep -o
undwc -l
. Katze ist in Fällen wie der ursprünglichen Frage jedoch schneller.Dies funktioniert für mehrere Vorkommen pro Zeile:
quelle
grep -o string * --exclude-dir=some/dir/one/ --exclude-dir=some/dir/two | wc -l
.grep -ioR string * | wc -l
ist das, was ich benutze, um eine Suche ohnegrep -rc test . | awk -F: '$NF > 0 {x+=$NF; $NF=""; print} END{print "Total:",x}'
zählt mehrere Vorkommen in einer Zeile
quelle
grep -oh "... my that curry was strong" * >> wc
:)Anstatt -c zu verwenden, leiten Sie es einfach an wc -l weiter.
Dadurch wird jedes Vorkommen in einer einzelnen Zeile aufgelistet und anschließend die Anzahl der Zeilen gezählt.
Dadurch werden jedoch Fälle übersehen, in denen die Zeichenfolge in einer Zeile mehr als 2 Mal vorkommt.
quelle
Eine der seltenen nützlichen Anwendungen von
cat
.quelle
Etwas anderes als alle vorherigen Antworten:
quelle
Sie können hinzufügen
-R
, um rekursiv zu suchen (und die Verwendung von cat zu vermeiden) und-I
Binärdateien zu ignorieren.quelle
Obligatorische AWK-Lösung:
Seien Sie vorsichtig, wenn Ihre Dateinamen ":" enthalten.
quelle
Die AWK-Lösung, die auch Dateinamen einschließlich Doppelpunkte verarbeitet:
Beachten Sie, dass diese Methode immer noch nicht mehrere Vorkommen
string
in derselben Zeile findet.quelle
Wenn Sie die Anzahl der Vorkommen pro Datei möchten (Beispiel für die Zeichenfolge "tcp"):
Beispielausgabe:
Erläuterung:
grep -RIci NEEDLE .
- sucht rekursiv nach der Zeichenfolge NEEDLE aus dem aktuellen Verzeichnis (nach Symlinks), ignoriert Binärdateien, zählt die Anzahl der Vorkommen und ignoriert Groß- und Kleinschreibungawk ...
- Dieser Befehl ignoriert Dateien mit null Vorkommen und formatiert Zeilensort -hr
- Sortiert die Zeilen in umgekehrter Reihenfolge nach Zahlen in der ersten SpalteNatürlich funktioniert es auch mit anderen grep-Befehlen mit Option
-c
(Anzahl). Zum Beispiel:quelle
Sie können eine einfache
grep
Methode verwenden , um die Anzahl der Vorkommen effektiv zu erfassen. Ich werde die-i
Option verwenden, um sicherzustellen,STRING/StrING/string
dass sie richtig erfasst wird.Befehlszeile, die den Namen der Dateien angibt:
Befehlszeile, die die Dateinamen entfernt und 0 druckt, wenn eine Datei ohne Vorkommen vorhanden ist:
quelle
kurze rekursive Variante:
quelle
Nur Grep-Lösung, die ich mit grep für Windows getestet habe:
Diese Lösung zählt alle Vorkommen, auch wenn mehrere in einer Zeile vorhanden sind.
-r
Durchsucht rekursiv das Verzeichnis und-o
zeigt "nur den Teil einer Zeile an, der mit MUSTER übereinstimmt" - dies teilt mehrere Vorkommen in einer einzelnen Zeile auf und lässt grep jede Übereinstimmung in einer neuen Zeile drucken. Leiten Sie dann diese durch Zeilenumbrüche getrennten Ergebnisse zurück in grep mit,-c
um die Anzahl der Vorkommen nach demselben Muster zu zählen.quelle
Hier ist eine alternative AWK-Alternative, die mehrere Übereinstimmungen
<url>
pro Zeile in einer Sammlung von XML-Dateien in einem Verzeichnis verarbeitet:Dies funktioniert gut in Fällen, in denen einige XML-Dateien keine Zeilenumbrüche aufweisen.
quelle
Ein weiterer Oneliner, der grundlegende Befehlszeilenfunktionen verwendet, behandelt mehrere Vorkommen pro Zeile.
quelle