LINUX.ORG.RU
ФорумJob

!!!подсчет числа символов указанного типа в любой строке символов

 ,


0

1

Здравствуйте)) Помогите, пожалуйста , разработать программу подсчета числа символов указанного типа в любой строке символов. Строка поиска и произвольный символ требуемого типа должны передаваться программе через 2 аргумента командной строки её вызова. При этом разнообразие искомых символов считается ограниченным буквами, цифрами и знаками пунктуации. Результат поиска должен отражать целочисленный код возврата программы


#!/bin/sh
set -efu

fatal() {
  printf "$@"
  exit 1
}

[ $# -ne 2 ] && fatal "Usage: %s <string> <symbol>\n" "$0"

string=$1
symbol=$2
count=0

len=${#string}
for i in $(seq 0 "$(($len-1))"); do
  current=${string:${i}:1}
  [ "$current" = "$symbol" ] && count=$((count+1))
done

exit "$count"
s3ap ()

grep -o -- "$2" <<< "$1" | wc -m
у грепа почему-то неправильно работает конструкция -co

teod0r ★★★★★ ()
Последнее исправление: teod0r (всего исправлений: 2)
Ответ на: комментарий от teod0r

у грепа почему-то неправильно работает конструкция -co

Так ведь -o *печатает* «совпавшую» часть (а не всю строку). А -c печатает кол-во совпадений.

Как они вообще вместе могут работать?

KennyMinigun ★★★★★ ()
#!/bin/sh
echo -n "Сколько раз \"$2\" встречатся в строке \"$1\"? "
read count
exit $count
i-rinat ★★★★★ ()
Ответ на: комментарий от teod0r

Если использовать вместо грепа ag -c, можно обойтись без wc. Правда, тогда надо ставить silversearcher, что к домашке ТС не имеет отношения :)
Там в отличие от грепа -c считает совпадения, а не строки с совпадениями. Ну и вообще штука хорошая.

massimus ★★★ ()
Ответ на: комментарий от KennyMinigun

ну оно же по идее должно считать, сколько совпадений найдёт

teod0r ★★★★★ ()
Ответ на: комментарий от teod0r

Почему-то думал, что -c печатает количество совпадений а не количество линий. Проверил в мануале и разочаровался :(

Короче да, тогда grep -o | wc -l ну или perl/sed/awk

KennyMinigun ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.