
Wenn ich meinen Grep-Befehl ausführe:
grep -rc 'PATTERN' .
Es druckt die Anzahl der Zeilen aus, in denen das Muster vorkommt, sieht aber folgendermaßen aus:
./hotel_232424.dat:234
und so weiter...
Wie kann ich das ./hotel_232424.dat:
Teil entfernen und nur die Nummer ausdrucken?
Antwort1
Bei der GNU-Implementierung von steht Ihnen hierfür grep
die Option -h
/ zur Verfügung.--no-filename
$ grep -rc PATTERN .
./b:1
./a:0
./1/2/c:2
$ grep -rhc PATTERN .
1
0
2
Das portable/Standard-Äquivalent wäre:
$ find . -type f -exec grep -c PATTERN {} \;
0
2
1
würde aber bedeuten, dass ein grep
Aufruf pro Datei ausgeführt wird.
Wenn Sie stattdessen die Gesamtzahl der Vorkommen (hier 1+2 = 3) möchten, können Sie (portabel) Folgendes tun:
$ find . -type f -exec cat {} + | grep -c PATTERN
3
(Beachten Sie, dass das Ergebnis durcheinander geraten kann, wenn bei manchen Dateien nach der letzten Zeile noch Daten vorhanden sind (also keine Textdateien).)
Oder mit einer grep
Unterstützung -r
wie Ihrer:
$ grep -r PATTERN . | wc -l
3