Du bist in der Nähe. So erhalten Sie eine Gesamtzahl aller Vorkommen von „ha“ in allen .txt-Dateien in einem Ordner:
grep -o "ha" *.txt | wc -l
Ab man grep
:
-o, --only-matching
Print only the matched (non-empty) parts of a matching line, with
each such part on a separate output line.
Das funktioniert, weil jeder Übereinstimmung wird in einer separaten Zeile ausgegeben, wodurch wc -l
ermöglicht wird um sie alle zu zählen.
Standardmäßig findet grep jedoch nur das erste Vorkommen einer Zeile und gibt die ganze Zeile aus. Ebenso Option -c
findet nur das erste Vorkommen in allen Zeilen und gibt dann aus, wie viele Zeilen 1 (oder mehr) Übereinstimmungen hatten.
BEARBEITEN:
Hier ist eine Möglichkeit, die Gesamtzahl der Vorkommen in jeder einzelnen Datei (mit Dateinamen) zu drucken:
find *.txt -printf 'echo "$(grep -o "ha" %p | wc -l) %p";' | sh
#Example output
3 file1.txt
1 file2.txt
Erklärung:
find *.txt
- findet .txt-Dateien
-printf
- gibt alles zwischen den einfachen Anführungszeichen (formatiert) auf die Standardausgabe aus und ersetzt Vorkommen von %p
mit der Ausgabe von find (Dateinamen)
$(grep -o "ha" %p | wc -l)
- Funktioniert wie oben
| sh
- die Ausgabe von -printf
(die Befehle sind) werden an eine Shell geleitet und ausgeführt
Beachten Sie, dass printf einmal pro Dateiname aufgerufen wird.
Anstatt grep
zu verwenden , versuchen Sie es mit ag -c ha
SilverSearcher:
1.txt:3
2.txt:1
Es ist schneller! Wenn Sie Ubuntu verwenden, können Sie das Paket silversearcher-ag
installieren .