J'ai besoin de compter le nombre d'occurrences d'un caractère dans une chaîne en utilisant Bash.
Dans l'exemple suivant, lorsque le caractère est (par exemple) t
, il echo
est le nombre exact d'occurrences t
dans var
, mais quand le caractère est une virgule ou point - virgule, il affiche zéro:
var = "text,text,text,text"
num = `expr match $var [,]`
echo "$num"
Réponses:
J'utiliserais la
awk
commande suivante :Je divise la chaîne par
$char
et j'imprime le nombre de champs résultants moins 1.Si votre shell ne prend pas en charge l'
<<<
opérateur, utilisezecho
:la source
$(grep -o "$needle" < filename | wc -l)
wc -l
, utilisez simplementgrep -c
, il fonctionne à la fois sur bsd grep et linux grep.grep -c
affichera uniquement le nombre de lignes correspondantes. Il ne compte pas plusieurs correspondances par ligne.vous pouvez par exemple supprimer tous les autres caractères et compter ce qui reste, comme:
va imprimer
ou
ou
ou
ou
ou
la source
y="${x//[^s|S]}"; echo "${#y}"
wc
? Il joue au golf!echo -n some line | wc -l
tr -dc ',' <<<"$var" | wc -c
Vous pouvez le faire en combinant
tr
et deswc
commandes. Par exemple, pour comptere
dans la chaînereferee
production
Explications: La commande
tr -cd 'e'
supprime tous les caractères autres que «e» et la commandewc -c
compte les caractères restants.Plusieurs lignes d'entrée sont également bonnes pour cette solution, comme la commande
cat mytext.txt | tr -cd 'e' | wc -c
peut comptere
dans le fichiermytext.txt
, même si le fichier peut contenir plusieurs lignes.la source
S'appuyant sur les bonnes réponses et commentaires de chacun, c'est la version la plus courte et la plus douce:
grep -o "$needle" <<< "$haystack" | wc -l
la source
awk fonctionne bien si votre serveur l'a
la source
awk -F,
recherche un fichier,
. Vous pouvez faire ce qui suit:awk -F"${your_char}"
Je suggérerais ce qui suit:
Aucun appel à aucun autre programme
la source
Vérifiez également ceci, par exemple nous voulons compter
t
ou dans
python
ou mieux encore, nous pouvons rendre notre script dynamique avec
awk
dans ce cas, la sortie est comme ceci:
la source