2010-02-02 7 views

Respuesta

6

esto va a hacer lo que quiere:

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

gracias exactamente lo que quiero;) – soField

+0

No sabía que el uso del tr -c, agradable –

+0

realidad tr -cd está haciendo bien este trabajo :) – soField

1

Aislar comas por línea, Count:

echo "$VAR"|grep -o ,|wc -l 
1

De la parte superior de la cabeza usando fiesta pura:

var="1,2,3,4" 
temp=${var//[^,]/} 
echo ${#temp} 
+0

Cambia la segunda línea a: 'temp = $ {var // [^,] /}' luego elimina cualquier cosa que no sea coma. –

+0

Buena llamada, gracias por el recordatorio – SiegeX

0

Una solución puramente fiesta sin programas externos:

$ X=1,2,3,4 
$ count=$(($(IFS=,; set -- $X; echo $#) - 1)) 
$ echo $count 
3 
$ 

Nota: Esto destruye sus parámetros posicionales.

+0

La evaluación y las comillas simples son innecesarias. –

+0

@Dennis: Ok. Me deshice de ellos. – camh

0

Otra solución pura Bash:

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

es la salida "10" a la cadena se muestra.

+0

No funciona con 'var =" 1,2,3 "' (parece funcionar solo si hay una coma al final). –

+0

@Alok: gracias por señalar eso. Ahora está arreglado. Sin embargo, me gusta ** la versión ** de SiegeX mejor. –

0

manera muy simple con awk

$ echo 1,2,3,4 | awk -F"," '{print NF-1}' 
3 

con sólo la cáscara

$ s="1,2,3,4" 
$ IFS="," 
$ set -- $s 
$ echo $(($#-1)) 
3 
0
echo '1,2,3' | grep -o ',' | wc -l 
Cuestiones relacionadas