Necesito contar la cantidad de ocurrencias de un char en una cadena usando Bash.
En el siguiente ejemplo, cuando el carácter es (por ejemplo) t, echoes el número correcto de ocurrencias de tin var, pero cuando el carácter es coma o punto y coma, imprime cero:
var = "text,text,text,text"
num = `expr match $var [,]`
echo "$num"

Respuestas:
Usaría el siguiente
awkcomando:Estoy dividiendo la cadena
$chare imprimo el número de campos resultantes menos 1.Si su shell no es compatible con el
<<<operador, useecho:fuente
$(grep -o "$needle" < filename | wc -l)wc -l, solo usegrep -c, funciona tanto en bsd grep como en linux grep.grep -csolo generará el número de líneas coincidentes. No cuenta múltiples coincidencias por línea.Puede, por ejemplo, eliminar todos los otros caracteres y contar los restos, como:
imprimirá
o
o
o
o
o
fuente
y="${x//[^s|S]}"; echo "${#y}"wc? ¡Golfs!echo -n some line | wc -ltr -dc ',' <<<"$var" | wc -cPuedes hacerlo combinando
trywccomandos. Por ejemplo, para contareen la cadenarefereesalida
Explicaciones: Command
tr -cd 'e'elimina todos los caracteres que no sean 'e', y Commandwc -ccuenta los caracteres restantes.Varias líneas de entrada también son buenas para esta solución, como el comando
cat mytext.txt | tr -cd 'e' | wc -cpuede contareen el archivomytext.txt, incluso si el archivo puede contener muchas líneas.fuente
Basándose en las excelentes respuestas y comentarios de todos, esta es la versión más corta y dulce:
grep -o "$needle" <<< "$haystack" | wc -lfuente
awk funciona bien si tu servidor lo tiene
fuente
awk -F,busca a,. Puede hacer lo siguiente:awk -F"${your_char}"Sugeriría lo siguiente:
No llame a ningún otro programa
fuente
también mira esto, por ejemplo queremos contar
to en
pythono incluso mejor, podemos hacer que nuestro script sea dinámico con
awken este caso la salida es así:
fuente