Linux Red Hat Enterprise Linux Server версии 6.9 (Сантьяго)
Проблема:
У меня есть 2 задания Jenkins, и они оба вызывают другую обычную / повторно используемую работу вниз по течению (которая использует регулярное выражение для выбора своей скорости вращения). Фактический код написан на Ruby (где я использовал ::Dir.glob("<pattern>",'')
, и он не работал для выбора правильного имени rpm (без каких-либо ошибок), но здесь я просто сосредоточился на части регулярных выражений.
В job1 , в моей рабочей области я вижу myrpm.rpm
и myrpm-extra.rpm
.
В job2 в моей рабочей области я вижу myrpm-3.0.0.1027-2018_12_21_121519.noarch.rpm
и myrpm-extra-3.0.0.1027-2018_12_21_121519.noarch.rpm
оборотов, которые я получаю после загрузки этих файлов из Artifactory через некоторый AQL.
После того, как rpms загружены из Aritfactory, то есть доступны в рабочей области Jenkins, я использую это обычное нижестоящее задание, чтобы выбрать нужную мне скорость,
используя "${rpmname}*.rpm"
регулярное выражение.
Проблема в том, что когда я передаю значение параметра rpmname
как " myrpm ", логика выбирает myrpm-extra.rpm
(в Job1 ) или myrpm-extra-3.0.0.1027-2018_12_21_121519.noarch.rpm
( Job2 ) вместо правильного (не лишнего), поскольку порядок символов -
на первом месте из-за последовательности ASCII.
Я протестировал регулярное выражение и увидел, почему в последней команде я не увидел ожидаемого результата. Разве 1?
в регулярном выражении не даст нам какие-либо строки, которые имеют arun
с 0 or 1
вхождением символа 1
?
[giga@linux-server giga]# echo -e "arun\narun1\narun2\narun11" |grep "arun"
arun
arun1
arun2
arun11
[giga@linux-server giga]#
[giga@linux-server giga]# echo -e "arun\narun1\narun2\narun11" |grep "arun1"
arun1
arun11
[giga@linux-server giga]#
[giga@linux-server giga]# echo -e "arun\narun1\narun2\narun11" |grep "arun1?"
[giga@linux-server giga]#
Вопросы:
1. Почему это работает, если я использую egrep
?
2. Почему он не работает с grep
, а справочная страница / примеры grep
говорит, что это поддерживает?
3. Какое регулярное выражение я могу использовать, чтобы, если я передал myrpm
в качестве значения параметра задания, он работал как в Job1, так и в Job2, где имя файла rpm содержит либо короткое, либо полное имя rpm.
Здесь: https://www.cyberciti.biz/faq/grep-regular-expressions/ (поиск оператор регулярных выражений grep ) и
man grep
показывает:
Repetition
A regular expression may be followed by one of several repetition operators:
---------------------------------------------------------------
? The preceding item is optional and matched at most once.
---------------------------------------------------------------
* The preceding item will be matched zero or more times.
+ The preceding item will be matched one or more times.
{n} The preceding item is matched exactly n times.
{n,} The preceding item is matched n or more times.
{,m} The preceding item is matched at most m times. This is a GNU extension.
{n,m} The preceding item is matched at least n times, but not more than m times.