Подсчитайте вхождения символа в строку с помощью Bash
мне нужно посчитать количество вхождений символа в строку С помощью Bash.
в следующем примере, когда Чара (пример) t, это echos правильное количество вхождений t in var, но когда символ запятая или точка с запятой, он выводит ноль:
var = "text,text,text,text" 
num = `expr match $var [,]`
echo "$num"
4 ответа:
Я бы использовал следующее :
string="text,text,text,text" char="," awk -F"${char}" '{print NF-1}' <<< "${string}"Я разделяю строку на
$charи выведите количество результирующих полей минус 1.если ваша оболочка не поддерживает
<<<оператора, использоватьecho:echo "${string}" | awk -F"${char}" '{print NF-1}'
вы можете, например, удалить все другие символы и подсчитать, что остается, например:
var="text,text,text,text" res="${var//[^,]}" echo "$res" echo "${#res}"печати
,,, 3или
tr -dc ',' <<<"$var" | awk '{ print length; }'или
tr -dc ',' <<<"$var" | wc -c #works, but i don't like wc.. ;)или
awk -F, '{print NF-1}' <<<"$var"или
grep -o ',' <<<"$var" | grep -c .или
perl -nle 'print s/,//g' <<<"$var"
вы можете сделать это путем объединения
trиwcкоманды. Например, считатьeв строкеrefereeecho "referee" | tr -cd 'e' | wc -cвыход
4Пояснения: Команда
tr -cd 'e'удаляет все символы, кроме 'e', и командаwc -cподсчитывает оставшиеся символы.несколько строк ввода также хороши для этого решения, например command
cat mytext.txt | tr -cd 'e' | wc -cможет считаетeв файлеmytext.txt, даже думал, что файл может содержать много русло.