Wie kann man herausfinden und zählen, wie viele Dateien ein bestimmtes Wort enthalten?

Wie kann man herausfinden und zählen, wie viele Dateien ein bestimmtes Wort enthalten?

Ich soll die Anzahl der Dateien ermitteln und anzeigen, die das Wort „Karotte“ enthalten (Groß-/Kleinschreibung wird ignoriert).

Das ist bisher alles, was ich habe. Ich bin mir nur nicht sicher, wie ich das WC hinzufügen kann, um zu zählen, wie viele Dateien das Wort „Karotte“ enthalten.

finden . -exec grep -i carrot {} \;

Antwort1

Zunächst einmal gibt es, wie andere bereits gesagt haben, keinen Grund find, zu verwenden. Verwenden Sie einfach rekursiv grep:

grep -irm 1 carrot . | wc -l 

Das -m 1stellt sicher, dass grepdie Suche nach jeder Datei nach der ersten Übereinstimmung beendet wird. Ohne sie zählen Sie nicht die Anzahl derDateiendie enthalten carrotaber die Anzahl derLinien, dieselbe Datei wird mehrfach gezählt, wenn sie mehrere Instanzen von enthält carrot. Von man grep:

    -r, --recursive
          Read all files  under  each  directory,  recursively,  following
          symbolic  links  only  if they are on the command line.  This is
          equivalent to the -d recurse option.
   -i, --ignore-case
          Ignore  case  distinctions  in  both  the  PATTERN and the input
          files.  (-i is specified by POSIX.)
   -m NUM, --max-count=NUM
          Stop reading a file after NUM matching lines. 

Wenn Sie es wirklich, wirklich mit find machen wollen, könnten Sie tun

find . -type f -exec grep -im 1 carrot {} \; | wc -l

Beachten Sie, dass ich dies angebe, -type fda Sie keine Verzeichnisse möchten grep.

Antwort2

Finden Sie die Anzahl der Dateien, die das Wort enthaltenKarotte

number_of_files=`grep -l -r -i "carrot" . | wc -l`

Bedeutung für die grepArgumente:

-l, --files-with-matches
         Only the names of files containing selected lines are written to standard output.  grep will only search a file until a match has been found, making
         searches potentially less expensive.  Pathnames are listed once per file searched.  If the standard input is searched, the string ``(standard
         input)'' is written.

-R, -r, --recursive
         Recursively search subdirectories listed.

-i : case insenstive

wc -l: gibt die Anzahl der Zeilen aus, die als Eingabe an das Programm übergeben wurden. In unserem Fall sind diese Zeilen die Namen von Dateien mit übereinstimmendem Eingabemuster, das von gefunden wurde grep.

Drucken Sie die Ausgabe

echo $number_of_files

Antwort3

Eine Variante der Lösung von smRaj wäre ein doppelter Aufruf von grep. Das Folgende würde das gleiche Ergebnis liefern wiegrep[usw]| Toilette -l:

grep -l -r -i "carrot" . | grep -c .

Im Folgenden wird eine nummerierte Liste der Dateien ausgedruckt, die das gesuchte Wort enthalten.

grep -l -r -i "carrot" . | grep -n .

verwandte Informationen