J'essaie d'obtenir le nombre de correspondances (dans ce cas, les occurrences de {
ou }
) dans chaque ligne d'un fichier .tex.
Je sais que l'indicateur -o
ne renvoie que la correspondance, mais il renvoie chaque correspondance sur une nouvelle ligne, même en combinaison avec l'indicateur -n
. Je ne sais pas ce que je pourrais faire pour compter les répétitions. L'indicateur -c
renvoie uniquement le nombre total de correspondances dans le fichier entier. Peut-être pourrais-je diriger une ligne à la fois vers grep?
grep -o -n '[{}]' <filename> | cut -d : -f 1 | uniq -c
La sortie sera quelque chose comme:
3 1
1 2
Signification 3 occurrences dans la première ligne et 1 dans la seconde.
Après avoir lu diverses solutions, je pense que c’est l’approche la plus simple au problème:
while read i; do echo $i |grep -o "matchingString"| wc -l; done < input.txt
L'utilisation de grep
est-elle une exigence? Voici une alternative:
sed 's/[^ {}] // g' votre_fichier | awk '{print NR, length}'
La sed
supprime tous les caractères autres que {
et }
(en ne laissant que les caractères {
et }
), puis la awk
compte les caractères sur chaque ligne (qui ne sont que les caractères {
et }
). Pour supprimer les lignes sans correspondance,
sed 's/[^ {}] // g' votre_fichier | awk '/./ {print NR, length}'
Notez que ma solution suppose (nécessite) que les chaînes que vous recherchez sont des caractères uniques. La réponse de Moebius s’adapte plus facilement aux chaînes multi-caractères. En outre, aucune de nos réponses n’exclut les occurrences citées ou échappées des caractères/chaînes d’intérêt; par exemple.,
{ "nullfunc() {}" }
serait considéré comme contenant quatre caractères d'accolade.