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

Как указать флаг (модификатор) регулярного выражения в if конструкции?

Конструкция:
if [[ "$text" =~ regexp ]]
  echo "$BASH_REMATCH"
fi

находит только первое совпадение регулярного выражения. Как найти все? Т.е. как указать модификатор g(global), для поиска по всей строке?

Или вот другой пример, есть строка вида:
Id=1
Name=image
Url=image.png

Необходимо получить параметр Name. Пишу следующий код:
name=`[[ "$text" =~ ^Name\=(.*)$ ]] && echo "${BASH_REMATCH[1]}"`

Как в этом примере указать модификатор "m", что бы символы ^ и $ означали начало и конец строки, а не всего текста.

P.S. Конечно же, на shell существует масса других способов решить эти проблемы, но мне нужно понять именно как указывать модификаторы в регулярных выражениях.
  • Вопрос задан
  • 2646 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@RPG
Непосредственно указать флаг нельзя, могу предложить такой вариант:
REG="Name=([^$IFS]*)"
[[ "$text" =~ $REG ]] && echo "${BASH_REMATCH[1]}"


Почему нельзя... Возможно из-за того что используются POSIX выражения.
Ответ написан
Ваш ответ на вопрос

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

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