Ich muss die Anzahl der Vorkommen eines Zeichens in einer Zeichenfolge mit Bash zählen.
Im folgende Beispiel, wenn das Zeichen (zum Beispiel) ist t
, es echo
s die richtige Anzahl von Vorkommen t
in var
, aber wenn das Zeichen Komma oder Semikolon ist, druckt es aus Null:
var = "text,text,text,text"
num = `expr match $var [,]`
echo "$num"
Antworten:
Ich würde den folgenden
awk
Befehl verwenden:Ich Aufspalten der Zeichenfolge durch
$char
und die Anzahl der resultierenden Felder minus 1 drucken.Wenn Ihre Shell den
<<<
Operator nicht unterstützt , verwenden Sieecho
:quelle
$(grep -o "$needle" < filename | wc -l)
wc -l
, verwenden Siegrep -c
es einfach , es funktioniert sowohl auf bsd grep als auch auf linux grep.grep -c
gibt nur die Anzahl der übereinstimmenden Zeilen aus. Es werden nicht mehrere Übereinstimmungen pro Zeile gezählt.Sie können zum Beispiel alle anderen Zeichen entfernen und die verbleibenden Zeichen zählen, z.
wird gedruckt
oder
oder
oder
oder
oder
quelle
y="${x//[^s|S]}"; echo "${#y}"
wc
? Es spielt Golf!echo -n some line | wc -l
tr -dc ',' <<<"$var" | wc -c
Sie können dies durch Kombinieren
tr
undwc
Befehlen tun . Zum Beispiel, ume
in der Zeichenfolge zu zählenreferee
Ausgabe
Erläuterungen: Der Befehl
tr -cd 'e'
entfernt alle Zeichen außer 'e' und der Befehlwc -c
zählt die verbleibenden Zeichen.Mehrzeiligen Eingabe sind auch gut für diese Lösung, wie Befehl
cat mytext.txt | tr -cd 'e' | wc -c
kann Zählungene
in der Dateimytext.txt
, dachte auch die Datei viele Zeilen enthalten.quelle
Aufbauend auf den großartigen Antworten und Kommentaren aller ist dies die kürzeste und süßeste Version:
grep -o "$needle" <<< "$haystack" | wc -l
quelle
awk funktioniert gut, wenn Ihr Server es hat
quelle
awk -F,
sucht nach einem,
. Sie können Folgendes tun:awk -F"${your_char}"
Ich würde folgendes vorschlagen:
Kein Aufruf eines anderen Programms
quelle
Schauen Sie sich das auch an, zum Beispiel wollen wir zählen
t
oder in
python
oder noch besser, wir können unser Skript mit dynamisieren
awk
In diesem Fall sieht die Ausgabe folgendermaßen aus:
quelle