Entfernen Sie den Dateinamen, wenn Sie die Anzahl der Vorkommen eines Musters rekursiv zählen

Entfernen Sie den Dateinamen, wenn Sie die Anzahl der Vorkommen eines Musters rekursiv zählen

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 grepdie 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 grepAufruf 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 grepUnterstützung -rwie Ihrer:

$ grep -r PATTERN . | wc -l
3

verwandte Informationen