Для чисто bash
единственного решения вы можете использовать оператор соответствия в цикле. Наложения не допускаются - как только совпадение найдено, оно удаляется из источника.
input=$1 # User input
sub=$2 # Substring to match
i=0
while [[ "$input" = *$sub ]] ; do
# Remove everything to first match
input=${input#*$sub}
i=$((i+1))
done
echo "REP=$i"
Вывод:
owner@vm1:~/Project/stackoverflow/58360772$ ./z.sh abccddccacc c
REP=6
owner@vm1:~/Project/stackoverflow/58360772$ ./z.sh abccddccacc cc
REP=3
owner@vm1:~/Project/stackoverflow/58360772$ ./z.sh abccddccacc ccc
REP=0
Не поддерживает «магические» символы, так как они потребуются лучшецитирую / соответствия.