Comment comptez-vous chaque occurrence d'un terme dans tous les fichiers du répertoire actuel? - et sous-répertoires (?)
J'ai lu que pour ce faire, vous utiliseriez grep
; quelle est la commande exacte?
Est-il également possible de faire ce qui précède avec une autre commande?
command-line
files
directory
grep
Dis moi pourquoi
la source
la source
PCREs
ne devrait pas être utilisé car ils sont expérimentaux-F
serait probablement plus rapide.-F
au lieu de-P
. Merci pour la bonne suggestion, la mise à jour en utilisant-F
, qui correspond en effet mieux ici.grep -Rc [term] *
Fera cela. L'-R
indicateur signifie que vous souhaitez rechercher récursivement le répertoire actuel et tous ses sous-répertoires. Le*
sélecteur de fichiers signifie: tous les fichiers. L'-c
indicateur rend lagrep
sortie uniquement le nombre d'occurrences. Cependant, si le mot apparaît plusieurs fois sur une même ligne, il n'est compté qu'une seule fois.De
man grep
:Si vous n'avez pas de liens symboliques dans votre répertoire, il n'y a pas de différence.
la source
-c
drapeau àgrep
. Alors grep se compte et vous n'avez pas besoin dewc
--
avant*
*
ne s'étendra qu'aux fichiers non dot, vous manquez donc tous ceux-ci. Il est plus logique d'utiliser simplement "." puisque vous allez de toute façon traiter les arguments de manière récursive - et cela obtiendra des fichiers dot. Le plus gros problème ici est que cela peut avoir le nombre de lignes, pas le nombre d'occurrences d'un mot. Si le terme apparaît plusieurs fois sur une même ligne, il ne sera compté qu'une seule fois par "grep -c"Dans un petit script python:
count_string.py
.Exécutez-le à partir du répertoire avec la commande:
Remarques
Explication:
la source
root
etf
pour?root
est le chemin d'accès au fichier, y compris "au-dessus" du répertoire courant,f
est le fichier. Alternativement,os.path.join()
pourrait être utilisé, mais est plus détaillé.n = n + open(f).read().count(s)
?En variante de la belle réponse de @ kos, si vous souhaitez détailler les nombres, vous pouvez utiliser le
-c
commutateur de grep pour compter les occurrences:la source