6
votes

Compter un mot spécifique en ligne à bash

J'ai une variable telle que "1,2,3,4"

Je veux compter des virgules dans ce texte dans Bash

aucune idée?

merci pour l'aide


0 commentaires

7 Réponses :


1
votes

Isoler des virgules par ligne, des lignes de comptage: xxx


0 commentaires

7
votes

Cela fera ce que vous voulez:

echo "1,2,3" | tr -cd ',' | wc -c


2 commentaires

Ne savait pas de cette utilisation tr -c, agréable


En fait, TR -CD fait bien ce travail :)



2
votes

éteint le dessus de ma tête en utilisant puure bash: xxx


1 commentaires

Modifiez la deuxième ligne à: temp = $ {var // [^,] /} alors il supprime toute non-virgule.



0
votes

une solution purement bash sans programmes externes: xxx

Remarque: cela détruit vos paramètres de position.


2 commentaires

Les devis Eval et Single sont inutiles.


@Dennis: OK. Je me suis débarrassé d'eux.



0
votes

Une autre solution pure bash:

var="bbb,1,2,3,4,a,b,qwerty,,,"
saveIFS="$IFS"
IFS=','
var=($var)x
IFS="$saveIFS"
echo $((${#var[@]} - 1))


2 commentaires

Ne fonctionne pas avec var = "1,2,3" (semble fonctionner uniquement s'il y a une virgule de fuite).


@Alok: Merci d'avoir souligné cela. C'est maintenant corrigé. J'aime mieux Siegex's Mieux cependant.



0
votes

Très simplement avec AWK

$ s="1,2,3,4"
$ IFS=","
$ set -- $s
$ echo $(($#-1))
3


0 commentaires

0
votes
echo '1,2,3' | grep -o ',' | wc -l

0 commentaires