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 en même temps. Il est utilisé pour générer des correspondances avec 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 greppeut se faire assez facilement.

Compter les correspondances avec grep

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

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

Cependant, grep il peut correspondre plusieurs fois dans une chaîne. Si vous utilisez un -o drapeau, grep imprimera une nouvelle ligne pour chaque correspondance. Cela ne fonctionne pas avec -c le drapeau, car seules les lignes correspondantes seront comptées, et non plusieurs correspondances par ligne.

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

grep -o "foo"file | wc -l

Compter sur plusieurs fichiers

Une fonctionnalité intéressante grep est la possibilité de traiter plusieurs fichiers en même temps, passés par xargsdes paramètres ou fournis avec des caractères génériques. Lors du traitement de plusieurs fichiers grep , le nom du fichier sera imprimé avant le match. Lorsqu’il est utilisé -c pour compter le nombre de lignes correspondantes, il imprime également les noms de fichiers :

grep "foo". /*.txt -cH

Vous devez toujours utiliser -H l’indicateur lorsqu’il s’agit de plusieurs fichiers, car il imprimera toujours le nom du fichier même s’il est au format grep. Cela empêchera l’automatisation de se casser si vous dépendez d’un nom de fichier.

Si vous souhaitez utiliser -o pour compter plusieurs correspondances dans une ligne et diriger la sortie vers wc -l, vous pourrez malheureusement voir les nombres pour chaque fichier individuel, comme avec -c. Cependant, avec un peu de script, vous pouvez couper la première colonne avec cut, et compter le nombre d’occurrences uniques pour chaque nom de fichier avec uniq -c:

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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *