Ich soll die Anzahl der Dateien finden und anzeigen, die das Wort Karotte enthalten (Groß- / Kleinschreibung ignoriert).
Bisher habe ich Folgendes: Ich bin mir nur nicht sicher, wie ich das WC hinzufügen soll, um zu zählen, wie viele Dateien das Wort Karotte enthalten
finden . -exec grep -i Karotte {} \;
bash
command-line
John
quelle
quelle
grep -r
ist rekursiv.Antworten:
Erstens, wie andere gesagt haben, gibt es keinen Grund
find
, nur rekursiv zu verwendengrep
:Die
-m 1
sorgt dafür , dassgrep
stoppen jede Datei nach dem ersten Spiel zu suchen. Ohne sie zählen Sie nicht die Anzahl der Dateien , die enthalten,carrot
sondern die Anzahl der Zeilen . Dieselbe Datei wird mehrmals gezählt, wenn sie mehrere Instanzen von enthältcarrot
. Vonman grep
:Wenn Sie es wirklich, wirklich mit find machen wollen, könnten Sie es tun
Beachten Sie, dass ich spezifiziere,
-type f
da Sie keinegrep
Verzeichnisse möchten .quelle
-m 1
wird nach einer Übereinstimmung beendet, nicht nach einer Übereinstimmung pro Datei. Das wird also eigentlich immer 1 zurückgeben. Ich denke, die zweite Lösung macht es aber richtig.grep -r
befasst sich immer noch mit einzelnen Dateien, es sind nicht nurcat
alle.Finden Sie die Anzahl der Dateien, die das Wort Karotte enthalten
Bedeutung für die
grep
Argumente:wc -l
: Gibt die Anzahl der Zeilen aus, die als Eingabe für das Programm übergeben wurden. In unserem Fall sind diese Zeilen die Namen von Dateien mit übereinstimmendem Eingabemuster, die von gefunden wurdengrep
.Drucken Sie die Ausgabe
quelle
wc
dagrep
die hat-c
Option. Fügen Sie doppelte Übereinstimmungen hinzu-c
und-m 1
vermeiden Sie diese.grep -ircm 1 carrot .
geben nicht die Anzahl der Dateien an, die eine Zeichenfolge enthalten. Stattdessen gibt die Option -c die Anzahl der Übereinstimmungen für das gesuchte Muster an, das pro Dateibasis gefunden wurde. Beispiel;filename1:count
filename2:count
. Ich bin nicht sicher,grep -ircm 1 carrot .
, druckt grep Dateinamen aus, auch wenn es nichtcarrot
mit Null als Anzahl enthält wie:file_name1:0
file_name2:0
-l
ist besser als-m
auch, aber hey, ich bleibe bei meinem Weg, da du es bereits benutzt :)Eine Variante der smRaj-Lösung wäre ein doppelter Aufruf von grep. Das Folgende würde das gleiche Ergebnis wie grep [ etc ] | ergeben wc -l :
Im Folgenden wird eine nummerierte Liste der Dateien gedruckt, die das gesuchte Wort enthalten.
quelle