Compter les occurrences d’un caractère dans une chaîne à l’aide de Bash

Je dois compter le nombre d’occurrences d’un caractère dans une chaîne en utilisant Bash.

Dans l’exemple suivant, lorsque le caractère est (par exemple) t , il fait echo au nombre correct d’occurrences de t dans var , mais lorsque le caractère est une virgule ou un point-virgule, il affiche zéro:

 var = "text,text,text,text" num = `expr match $var [,]` echo "$num" 

J’utiliserais la commande awk suivante:

 ssortingng="text,text,text,text" char="," awk -F"${char}" '{print NF-1}' <<< "${string}" 

Je divise la chaîne par $char et affiche le nombre de champs résultants moins 1.

Si votre shell ne supporte pas l'opérateur <<< , utilisez echo :

 echo "${ssortingng}" | awk -F"${char}" '{print NF-1}' 

Vous pouvez par exemple supprimer tous les autres caractères et compter ce qui rest, comme:

 var="text,text,text,text" res="${var//[^,]}" echo "$res" echo "${#res}" 

imprimera

 ,,, 3 

ou

 tr -dc ',' <<<"$var" | awk '{ print length; }' 

ou

 tr -dc ',' <<<"$var" | wc -c #works, but i don't like wc.. ;) 

ou

 awk -F, '{print NF-1}' <<<"$var" 

ou

 grep -o ',' <<<"$var" | grep -c . 

ou

 perl -nle 'print s/,//g' <<<"$var" 

Vous pouvez le faire en combinant les commandes tr et wc . Par exemple, compter e dans l’ referee chaîne

 echo "referee" | tr -cd 'e' | wc -c 

sortie

 4 

Explications: La commande tr -cd 'e' supprime tous les caractères autres que ‘e’ et Command wc -c compte les caractères restants.

Plusieurs lignes d’entrée sont également bonnes pour cette solution, comme la commande cat mytext.txt | tr -cd 'e' | wc -c cat mytext.txt | tr -cd 'e' | wc -c cat mytext.txt | tr -cd 'e' | wc -c peut compter e dans le fichier mytext.txt , même si le fichier peut contenir plusieurs lignes.

awk fonctionne bien si votre serveur l’a

 var="text,text,text,text" num=$(echo "${var}" | awk -F, '{print NF-1}') echo "${num}"