Vous êtes proche. Pour obtenir le nombre total de toutes les occurrences de "ha" dans tous les fichiers .txt d'un dossier :
grep -o "ha" *.txt | wc -l
De man grep
:
-o, --only-matching
Print only the matched (non-empty) parts of a matching line, with
each such part on a separate output line.
Cela fonctionne parce que chaque match est imprimé sur une ligne séparée, permettant ainsi wc -l
pour les compter tous.
Par défaut, cependant, grep ne trouve que la première occurrence sur une ligne et affiche la ligne entière. De même, l'option -c
ne trouve que la première occurrence dans toutes les lignes, puis affiche le nombre de lignes ayant 1 (ou plusieurs) correspondances.
MODIF :
Voici un moyen d'imprimer le nombre total d'occurrences dans chaque fichier individuel (avec les noms de fichiers) :
find *.txt -printf 'echo "$(grep -o "ha" %p | wc -l) %p";' | sh
#Example output
3 file1.txt
1 file2.txt
Explication :
find *.txt
- trouve les fichiers .txt
-printf
- imprime tout entre les guillemets simples (formatés) sur la sortie standard, en remplaçant les occurrences de %p
avec la sortie de find (noms de fichiers)
$(grep -o "ha" %p | wc -l)
- fonctionne comme ci-dessus
| sh
- la sortie de -printf
(qui sont des commandes) sont redirigés vers un shell et exécutés
Notez que printf est invoqué une fois par nom de fichier.
Au lieu d'utiliser grep
, essayez d'utiliser ag -c ha
Chercheur d'argent :
1.txt:3
2.txt:1
C'est plus rapide ! Si vous utilisez Ubuntu, vous pouvez installer le package silversearcher-ag
.