Lors de la recherche du nombre d'occurrences d'une chaîne dans un fichier, j'utilise généralement:
grep pattern file | wc -l
Cependant, cela ne trouve qu'une occurrence par ligne, en raison de la façon dont fonctionne grep. Comment puis-je rechercher le nombre de fois qu'une chaîne apparaît dans un fichier, qu'elles soient sur les mêmes lignes ou sur des lignes différentes?
Aussi, que faire si je recherche un modèle regex, pas une simple chaîne? Comment puis-je les compter ou, mieux encore, imprimer chaque correspondance sur une nouvelle ligne?
grep -o foo a.txt b.txt | sort | uniq -c
fonctionne très bien (avec GNU grep): gist.github.com/hudolejev/81a05791f38cbacfd4de3ee3b44eb4f8Essaye ça:
Échantillon:
la source
Un article tardif:
utilisez le modèle de recherche regex comme séparateur d'enregistrement (RS) dans
awk
Cela permet à votre expression
\n
régulière de s'étendre sur des lignes délimitées (si vous en avez besoin).la source
Ripgrep , qui est une alternative rapide à grep, vient d'introduire le
--count-matches
drapeau permettant de compter chaque correspondance dans la version 0.9 (j'utilise l'exemple ci-dessus pour rester cohérent):Comme demandé par OP, ripgrep permet également le motif regex (
--regexp <PATTERN>
). Il peut également imprimer chaque correspondance (ligne) sur une ligne distincte:la source
Hackez la fonction de couleur de grep et comptez le nombre de balises de couleur imprimées:
la source