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 grep
peut 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 xargs
des 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