Comment compter l’occurrence d’un caractère spécifique dans une chaîne ou un fichier à l’aide de bash
Vous trouverez ci-dessous quelques conseils sur la façon de compter une occurrence d’un caractère spécifique dans un fichier ou dans une chaîne. On dit qu’on a une chaîne « Hello Bash » :
STRING="Hello Bash"
echo $STRING
Hello Bash
En utilisant bash shell, nous pouvons maintenant compter une occurrence de n’importe quel caractère donné. Par exemple, comptons le nombre d’occurrences d’un caractère l :
echo $STRING | sed -e 's/\(.\)/\1\n/g' | grep l | wc -l
2
La commande sed sépare d’abord une chaîne donnée en plusieurs lignes. Lorsque chaque ligne contient un seul caractère :
echo $STRING | sed -e 's/\(.\)/\1\n/g'
H
e
l
l
o
B
a
s
h
Après cela, nous pouvons utiliser la commande grep pour rechercher uniquement des caractères spécifiques. Dans ce cas, nous n’affichons que le caractère l :
echo $STRING | sed -e 's/\(.\)/\1\n/g' | grep l
l
l
Il ne reste plus qu’à utiliser wc -l pour simplement compter les lignes :
echo $STRING | sed -e 's/\(.\)/\1\n/g' | grep l | wc -l
2
La même stratégie peut également être utilisée pour compter une occurrence de caractère dans un fichier. La commande bash shell ci-dessous compte le nombre de fois qu’un caractère l apparaît dans le fichier /etc/services :
$ cat /etc/services | sed -e 's/\(.\)/\1\n/g' | grep l | wc -l
9298
Pourtant, une autre alternative pour compter l’occurrence de caractères est d’utiliser l’option --only-matching ou -o de grep pour n’afficher que les caractères correspondants :
grep -o l /etc/services | wc -l
9298