GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Zählen aller Vorkommen einer Zeichenfolge in allen Dateien in einem Ordner

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 .


Linux
  1. So entfernen Sie alle Dateien in einem Ordner außer einer bestimmten Datei in Linux

  2. Alle Dateien/Verzeichnisse außer einer Datei entfernen?

  3. Grep Word in einer Datei und dann die Datei kopieren?

  4. Alle Dateien in einem Ordner außer den letzten (neuesten) 20 löschen?

  5. Alle Dateien in einem Ordner drucken?

So finden Sie eine bestimmte Zeichenfolge oder ein bestimmtes Wort in Dateien und Verzeichnissen

Wie lösche ich alle Dateien mit einer bestimmten Erweiterung in einem bestimmten Ordner?

So führen Sie eine Grep-Suche für alle Dateien und in allen Verzeichnissen durch

Wie finde ich unter Linux alle Dateien, die bestimmten Text enthalten?

Verzeichnisse mit allen Dateien finden, die älter als X sind?

Durchsuchen einer Reihe von Dateien nach einem String in LInux