Preciso contar o número de ocorrências de um caractere em uma string usando o Bash.
No exemplo a seguir, quando o caractere é (por exemplo) t
, echo
é o número correto de ocorrências de t
in var
, mas quando o caractere é vírgula ou ponto e vírgula, ele imprime zero:
var = "text,text,text,text"
num = `expr match $var [,]`
echo "$num"
Respostas:
Eu usaria o seguinte
awk
comando:Estou dividindo a string
$char
e imprima o número de campos resultantes menos 1.Se o seu shell não suportar o
<<<
operador, useecho
:fonte
$(grep -o "$needle" < filename | wc -l)
wc -l
, basta usargrep -c
, ele funciona tanto em bsd grep quanto em linux grep.grep -c
produzirá apenas o número de linhas correspondentes. Não conta várias correspondências por linha.você pode, por exemplo, remover todos os outros caracteres e contar o que resta, como:
irá imprimir
ou
ou
ou
ou
ou
fonte
y="${x//[^s|S]}"; echo "${#y}"
wc
? Golfe!echo -n some line | wc -l
tr -dc ',' <<<"$var" | wc -c
Você pode fazer isso combinando
tr
ewc
comandos. Por exemplo, para contare
na sequênciareferee
resultado
Explicações: O comando
tr -cd 'e'
remove todos os caracteres, exceto 'e', e o comandowc -c
conta os caracteres restantes.Várias linhas de entrada também são boas para esta solução, como comando
cat mytext.txt | tr -cd 'e' | wc -c
pode contare
no arquivomytext.txt
, mesmo que o arquivo contenha muitas linhas.fonte
Com base nas ótimas respostas e comentários de todos, esta é a versão mais curta e agradável:
grep -o "$needle" <<< "$haystack" | wc -l
fonte
O awk funciona bem se você tiver seu servidor
fonte
awk -F,
procura um,
. Você pode fazer o seguinte:awk -F"${your_char}"
Eu sugeriria o seguinte:
Nenhuma chamada para outro programa
fonte
também verifique isso, por exemplo, queremos contar
t
ou em
python
ou melhor ainda, podemos tornar nosso script dinâmico com
awk
neste caso, a saída é assim:
fonte