
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 1
stellt sicher, dass grep
die Suche nach jeder Datei nach der ersten Übereinstimmung beendet wird. Ohne sie zählen Sie nicht die Anzahl derDateiendie enthalten carrot
aber 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 f
da 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 grep
Argumente:
-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 .