Anzahl der Zeilen im Terminalausgang zählen

264

konnte dies auf SO nicht finden. Ich habe den folgenden Befehl im Terminal ausgeführt:

>> grep -Rl "curl" ./

und dies zeigt die Liste der Dateien an, in denen das Schlüsselwort curl auftritt. Ich möchte die Anzahl der Dateien zählen. Der erste Weg, den ich mir vorstellen kann, besteht darin, die Anzahl der Zeilen in der Ausgabe zu zählen, die im Terminal eingegangen sind. Wie kann ich das machen?

Roopunk
quelle
40
grep selbst hat auch das -cFlag, das nur die Zählung
zurückgibt
Siehe auch
AlikElzin-kilaka

Antworten:

475

Leiten Sie das Ergebnis an wcden Schalter -l( Zeilenanzahl ) weiter:

grep -Rl "curl" ./ | wc -l
João Silva
quelle
1
Ich habe verwendet, grep "" -caber das ist viel schöner :)
ninhenzo64
3
Es sollte beachtet werden, dass dieser Trick der Weiterleitung an wc für jede Ausgabe funktioniert, nicht nur für die grep-Ausgabe. Zum Beispiel kann es mit einem Git Diff kombiniert werden.
Jason L.
1
Warum ist dies die akzeptierte Antwort? Wie in einigen Kommentaren erwähnt, sollte die eingebaute Funktion grep -cverwendet werden, anstatt die Ausgabe an ein anderes Programm weiterzuleiten. Sie würden beispielsweise nicht einmal Zeichen in Ihrem Word-Dokument mit einem anderen Texteditor als Word ändern, oder?
Michael P
57

Geben Sie hier den Kommentar von EaterOfCode als Antwort ein.

grep selbst hat auch das Flag -c, das nur die Anzahl zurückgibt

Der Befehl und die Ausgabe könnten also so aussehen.

$ grep -Rl "curl" ./ -c
24

BEARBEITEN:

Obwohl diese Antwort kürzer sein könnte und daher besser erscheinen könnte als die akzeptierte Antwort (die verwendet wird wc). Dem stimme ich nicht mehr zu. Ich möchte daran denken, dass das Zählen von Zeilen durch Weiterleiten wc -lviel nützlicher ist, da Sie es auch mit anderen Programmen verwenden können grep.

JelteF
quelle
5

Das Weiterleiten an 'wc' könnte besser sein
, wenn die letzte Zeile mit einer neuen Zeile endet (ich weiß, dass dies in diesem Fall der Fall ist) . Wenn die letzte Zeile jedoch nicht mit einer neuen Zeile endet, gibt 'wc -l' ein falsches Ergebnis zurück.

Beispielsweise:

$ echo "asd" | wc -l

Komme zurück 1und

$ echo -n "asd" | wc -l

Wird zurückkehren 0


Also was ich oft benutze ist grep <anything> -c

$ echo "asd" | grep "^.*$" -c
1

$ echo -n "asd" | grep "^.*$" -c
1

Dies ist näher an der Realität als das, was wc -lzurückkehren wird.

GCS
quelle