Задать вопрос

Как выполнить код для каждого вхождения подстроки в строке?

Есть текстовая строка (коммит сообщение с номерами задач):

текст #123 текст
#23456
текст #3456
текст ....


Необходимо для каждой задачи - вхождения "решетка-цифры" (#123, #23456, #3456) выполнить одинаковый код по замене, например выполнить локальную функцию replace_digits $ISSUE

При одном вхождении можно получить позицию первого вхождения NUM_POS=$(expr index "$MSG_SRC" "#") и дальше выделить цифры в $ISSUE.

Но как бы посоветовали оптимально перебрать все вхождения?
Т.к. expr index работает с первым вхождением - пока планирую обрезать исходную строку по мере выделения номеров, и повторять пока не закончатся решетки.

PS
И может подскажете красивый вариант выделению цифр?
Попробовал было после обрезки строки от ее начала до первого номера задачи и потом:
IFS=" "
set $LINE
ISSUE=$1

Но столкнулся с тем, что после номера задачи может идти не только пробел, но и запятая и перевод строки и т.п.

Есть много советов как выделить подстроку (в т.ч. только цифры) "до определенного символа", но пока не нашел от начала и "до не-цифры"...
  • Вопрос задан
  • 112 просмотров
Подписаться 2 Простой 6 комментариев
Пригласить эксперта
Ответы на вопрос 1
saboteur_kiev
@saboteur_kiev Куратор тега bash
software engineer
если после номера задачи идет и перевод строки, то это уже не нахождение в строке.
от начала до не-цыфра простой регуляркой.
Если все цифры начинаются с номера, то можно так

sed -r 's/#.{0.1}\d*/replacement/g' file
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы