¿Cómo cuento el número de puntos en una cadena en BASH? Por ejemploContando el número de puntos en una cadena
VAR="s454-da4_sd.fs_84-df.f-sds.a_as_d.a-565sd.dasd"
# Variable VAR contains 5 dots
¿Cómo cuento el número de puntos en una cadena en BASH? Por ejemploContando el número de puntos en una cadena
VAR="s454-da4_sd.fs_84-df.f-sds.a_as_d.a-565sd.dasd"
# Variable VAR contains 5 dots
VAR="s454-da4_sd.fs_84-df.f-sds.a_as_d.a-565sd.dasd"
echo $VAR | tr -d -c '.' | wc -c
tr -d
borra dado caracteres de la entrada. -c
toma el inverso de los caracteres dados. en conjunto, esta expresión elimina no '.' caracteres y cuenta la longitud resultante usando wc
.
Puede hacerlo combinando grep
y wc
comandos:
echo "string.with.dots." | grep -o "\." | wc -l
Explicación:
grep -o # will return only matching symbols line/by/line
wc -l # will count number of lines produced by grep
O única grep
puede utilizar para tal fin:
echo "string.with.dots." | grep -o "\." | grep -c "\."
Solución en pura bash
:
VAR="s454-da4_sd.fs_84-df.f-sds.a_as_d.a-565sd.dasd"
VAR_TMP="${VAR//\.}" ; echo $((${#VAR} - ${#VAR_TMP}))
o incluso sólo como chepner mencionó:
VAR="s454-da4_sd.fs_84-df.f-sds.a_as_d.a-565sd.dasd"
VAR_TMP="${VAR//[^.]}" ; echo ${#VAR_TMP}
O 'DOTS = $ {VAR_TMP // [^.]}; echo $ {# DOTS} '. – chepner
VAR="s454-da4_sd.fs_84-df.f-sds.a_as_d.a-565sd.dasd"
dot_count=$(IFS=.; set $VAR; echo $(($# - 1)))
Esto funciona ajustando el separador de campo a "" en una subshell y estableciendo los parámetros posicionales dividiendo las palabras de la cadena. Con N puntos, habrá N + 1 parámetros posicionales. Terminamos restando uno del número de parámetros posicionales en la subcadena y haciendo eco de eso para ser capturado en dot_count
.
Esto quitará los puntos iniciales y finales. – nneonneo
awk
alternativa:
echo "$VAR" | awk -F. '{ print NF - 1 }'
Salida:
5
establecer temporalmente IFS
, Bash pura, no hay subprocesos:
IFS=. VARTMP=(X${VAR}X) # avoid stripping dots
echo $((${#VARTMP[@]} - 1))
Salida:
5
Posible duplicado de [contar ocurrencias de char en cadena usando bash] (http://stackoverflow.com/questions/16679369/count-occurrences-of-char-in-string-using-bash) –