Comment grep rechercher des noms de fichiers au lieu de contenu sous Linux
Agence web » Actualités du digital » Comment compter toutes les correspondances d’une chaîne avec grep pour Linux

Comment compter toutes les correspondances d’une chaîne avec grep pour Linux

grep est un utilitaire de recherche de texte qui peut fonctionner avec une entrée standard ou plusieurs fichiers à la fois. Il est utilisé pour imprimer des correspondances pour des modèles, des chaînes ou des expressions régulières. Il est souvent utile de pouvoir compter le nombre de matchs, ce qui grep peut faire assez facilement.

Compter les correspondances avec grep

La grep la commande a le -c drapeau, qui comptera le nombre de lignes correspondantes et imprimera un nombre. Ceci est utile pour de nombreuses choses, telles que la recherche dans les fichiers journaux du nombre d’entrées à partir d’une adresse IP de particule, d’un point de terminaison ou d’un autre identifiant.

grep -c "1.2.3.4" /var/log/nginx/access.log

Cependant, grep est capable de correspondre plusieurs fois par ligne. Si vous utilisez le -o drapeau, grep imprimera une nouvelle ligne par match. Cela ne fonctionne pas avec le -c flag, car il ne comptera que les correspondances lignespas plusieurs correspondances par ligne.

Une meilleure solution consiste à utiliser le wc (nombre de mots) avec l’utilitaire -l paramètre (lignes), qui comptera le nombre brut de lignes qui lui sont transmises via l’entrée standard. Utilisant wc -l est la solution préférée car elle fonctionne avec -o pour compter le nombre d’occurrences de la chaîne ou du modèle donné dans l’ensemble du fichier.

grep -o "foo" file | wc -l

Comptage sur plusieurs fichiers

Une belle caractéristique de grep est la capacité de gérer plusieurs fichiers à la fois, soit transmis xargs, paramètres ou fournis avec une extension générique. Lors de la gestion de plusieurs fichiers, grep imprimera le nom du fichier avant le match. Lors de l’utilisation -c pour compter le nombre de lignes correspondantes, il imprimera également les noms de fichiers :

grep "foo" ./*.txt -cH

Vous devez toujours utiliser le -H drapeau lorsque vous travaillez avec la possibilité de plusieurs fichiers, car il imprimera toujours le nom du fichier même s’il n’y a qu’un seul fichier passé à grep. Cela empêchera l’automatisation de se casser si vous dépendez de la présence du nom de fichier.

Si vous voulez utiliser -o pour compter plusieurs correspondances par ligne et transmettre la sortie à wc -lvous aurez malheureusement la possibilité de voir les numéros pour chaque fichier individuel comme avec -c. Cependant, avec un peu de script, vous pouvez couper la première colonne avec cutet comptez le nombre d’occurrences uniques pour chaque nom de fichier avec uniq -c:

grep "foo" ./*.txt -o | cut -d ':' -f 1 | uniq -c

★★★★★