Wie würden Sie jedes Vorkommen eines Begriffs in allen Dateien im aktuellen Verzeichnis zählen? - und Unterverzeichnisse (?)
Ich habe gelesen, dass Sie dazu verwenden würden grep
; Was ist der genaue Befehl?
Ist es auch möglich, dies mit einem anderen Befehl zu tun?
command-line
files
directory
grep
Sag mir warum
quelle
quelle
PCREs
sollte nicht verwendet werden, da sie experimentell sind-F
wäre wohl schneller.-F
statt-P
. Vielen Dank für den tollen Vorschlag, mit zu aktualisieren-F
, der hier tatsächlich besser passt.grep -Rc [term] *
wird das machen. Das-R
Flag bedeutet, dass Sie das aktuelle Verzeichnis und alle seine Unterverzeichnisse rekursiv durchsuchen möchten. Das*
ist eine Dateiauswahl, die bedeutet: alle Dateien. Das-c
Flag gibtgrep
nur die Anzahl der Vorkommen aus. Wenn das Wort jedoch mehrmals in einer einzelnen Zeile vorkommt, wird es nur einmal gezählt.Von
man grep
:Wenn Sie keine symbolischen Links in Ihrem Verzeichnis haben, gibt es keinen Unterschied.
quelle
-c
Flagge hinzufügengrep
. Dann zählt sich grep selbst und Sie brauchen daswc
--
vor*
*
wird nur auf Nicht-Dotfiles erweitert, so dass Sie alle diese vermissen. Es ist sinnvoller, nur "." da du Argumente sowieso rekursiv verarbeiten wirst - und das wird Punktdateien bekommen. Das größere Problem hierbei ist, dass dies die Anzahl der Zeilen und nicht die Anzahl der Vorkommen eines Wortes sein kann. Wenn der Begriff mehrmals in einer Zeile vorkommt, wird er von "grep -c"In einem kleinen Python-Skript:
count_string.py
.Führen Sie es mit dem folgenden Befehl aus dem Verzeichnis aus :
Anmerkungen
Erläuterung:
quelle
root
und wofürf
?root
ist der Pfad zur Datei einschließlich "über" dem aktuellen Verzeichnis,f
ist die Datei. Alternativos.path.join()
könnte verwendet werden, ist aber ausführlicher.n = n + open(f).read().count(s)
?Als Variante der netten Antwort von @ kos können Sie, wenn Sie daran interessiert sind, die Anzahl aufzulisten, den
-c
Schalter von grep verwenden , um Vorkommen zu zählen:quelle