Может ли расширение параметра обрабатывать множественные спецификации вхождения - PullRequest
1 голос
/ 01 октября 2019

С помощью оператора name%pattern с задней привязкой на сервере сборки и заданной входной строкой, такой как:

remainstr1-remaingstr2--9.99.9-remainstr3-20190920.115934-4.zip

Мне нужна часть 20190920.115934-4.zip длябыть удаленным.

Мне удалось успешно применить это преобразование с использованием подстановочных знаков символов и литералов. Но я не смог заставить его работать, указав несколько вхождений данного диапазона, используя квантификатор +. (конечно, цифры в части удаления могут быть любыми цифрами) .

До сих пор работает следующий шаблон (конечно, замена .* детали на \.zip такжеработает) :

REMAIN_STRING=${START_STRING%[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].[0-9][0-9][0-9][0-9][0-9][0-9]-[0-9].*}

Но это выглядит совершенно не элегантно, и я хотел бы указать несколько вхождений класса символов цифр ([0-9]), но я мог бы заставить его работать.

Я, очевидно, пытался

REMAIN_STRING=${START_STRING%[0-9]+.[0-9]+-[0-9].*} 

, а также многочисленные возможности с или без скобок, обратная косая черта экранируется, но REMAIN_STRING просто остается такой же, как START_STRING.

Я также пытался сохранитьшаблон в качестве переменной, как в некоторых примерах, предлагает:
X="[([0-9]+)-([0-9]+).zip]", а затем: REMAIN_STRING=${START_STRING%$X}

Но все терпят неудачу!

Теперь это расстраивает меня, даже больше, потому что я получаюнет сообщений об ошибках. Просто ничего не происходит.

Итак, я спрашиваю себя: могут ли операторы name%pattern и аналогичные обрабатывать сложные / расширенные регулярные выражения или я где-то пропускаю простой escape?

1 Ответ

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

Я попробовал extglob, предложенный Бенджамином, и протестировал несколько вариантов, но безуспешно.

Предложение Бенджамина W. о настройке extglob хорошо, только данный шаблон неполон;этот работает:

shopt -s extglob
REMAIN_STRING=${START_STRING%-+([0-9]).+([0-9])-[0-9].*}-
...