Shell Script для определения количества вхождений подстроки - PullRequest
0 голосов
/ 14 октября 2019

Я выясняю, как написать сценарий оболочки, чтобы узнать количество вхождений подстроки в основную строку.

EX.

Sample input = abccddccacc 
Enter sub-string=cc 
Sample Output: Number of occurrences =3

Я понимаю базовый алгоритм, но мне трудно его кодировать в оболочке.

Спасибо,

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

Эта функция использует GNU grep;который обманывает, но универсален:

count(){ grep -o "$1" | grep -c "$1" ; }

Некоторые тесты:

count cc <<< abccddccacc
man bash | count cc   # input from pipes is OK
count ea < /usr/share/doc/bash/examples/INDEX.txt   # input from a file...

Вывод:

3
117
23
0 голосов
/ 14 октября 2019

Для чисто 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

Не поддерживает «магические» символы, так как они потребуются лучшецитирую / соответствия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...