Как написать регулярное выражение, которое работает с многострочным текстом?

Рейтинг: 1Ответов: 2Опубликовано: 30.05.2023

Есть список вывода в переменную вида:

ONLINE Yes
ONLINE Yes
ONLINE Yes

Нужно в баше в "если" запихать сверку на регулярном выражении, что вся переменная состоит только из таких строчек.

У меня получилось так: ^(ONLINE Yes($|\n))*$, на сайтике работает с ^ (начать сначала), а в баше не хочет:

if [[ "${V_CELL_DISK}" =~ ^(ONLINE Yes($|\n))*$ ]];
    then
    ...
fi

Глянуть можно тут https://regex101.com/r/75lrTP/1

Ответы

▲ 2Принят

На сайте вы проверяете регулярное выражение в соответствии со стандартом PCRE2, в Perl ваше регулярное выражение прекрасно работает, а в Bash \n не будет работать, используйте $'\n' вместо \n.

Например, так:

^(ONLINE Yes($|$'\n'))*$
▲ 0

проблема была в \n - пришлось выносить в переменную :(