【发布时间】:2019-01-10 04:43:43
【问题描述】:
Linux Red Hat Enterprise Linux Server 6.9 版(圣地亚哥)
问题:
我有 2 个 Jenkins 工作,它们都调用另一个常见/可重用的下游工作(使用正则表达式来选择它的 rpm)。实际代码是用 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 rpms,这是我通过一些 AQL 从 Artifactory 下载这些文件后获得的。
一旦从 Aritfactory 下载了 rpm,即在 Jenkins 工作区中可用,然后我使用这个常见的下游作业来选择我需要的给定 rpm
使用"${rpmname}*.rpm" 正则表达式。
问题是,当我将 我测试了正则表达式并查看了为什么在最后一个命令中我没有看到预期的输出。正则表达式中的 问题: 这里:https://www.cyberciti.biz/faq/grep-regular-expressions/(搜索 grep 正则表达式运算符)和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 名称。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.
【问题讨论】:
-
grep -E "arun1?"使用扩展的正则表达式。 BRE 中的?只是文字? -
手册页中的相关行:
In basic regular expressions the metacharacters ?, +, {, |, (, and ) lose their special meaning; instead use the backslashed versions \?, \+, \{, \|, \(, and \). -
谢谢@anubhava 有什么表达式可以同时适用于 Job1 和 Job2 的情况吗?
标签: ruby regex linux bash grep