GNU/Linux >> Tutoriels Linux >  >> Linux

Compter toutes les occurrences d'une chaîne dans tous les fichiers d'un dossier

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 .


Linux
  1. Comment supprimer tous les fichiers d'un dossier sauf un fichier spécifique sous Linux

  2. Supprimer tous les fichiers/répertoires sauf un fichier ?

  3. Grep Word dans un fichier puis copier le fichier ?

  4. Supprimer tous les fichiers d'un dossier sauf le dernier (le plus récent) 20 ?

  5. Comment trouver tous les fichiers qui ne contiennent pas de chaîne de texte ?

Comment trouver une chaîne ou un mot spécifique dans les fichiers et les répertoires

Comment effectuer une recherche Grep sur tous les fichiers et dans tous les répertoires

Comment puis-je trouver tous les fichiers contenant du texte spécifique sous Linux ?

Trouver tous les fichiers de plus d'une minute

Trouver des répertoires contenant tous les fichiers antérieurs à X ?

Recherche d'un certain nombre de fichiers pour une chaîne dans Linux