gpt4 book ai didi

Ruby 或 Bash 或 Grep 正则表达式不适用于 '?',即前一个字符出现 0 次或 1 次

转载 作者:太空宇宙 更新时间:2023-11-04 09:12:04 27 4
gpt4 key购买 nike

Linux Red Hat Enterprise Linux Server 6.9 版(圣地亚哥)

问题:
我有 2 个 Jenkins 作业,它们都调用另一个常见/可重用的下游作业(使用正则表达式来选择其 rpm)。实际代码是用 Ruby 编写的(我在其中使用 ::Dir.glob("<pattern>",''),它无法选择正确的 rpm 名称(没有给我任何错误),但这里我只关注正则表达式部分。

job1 中,在我的工作区中,我看到 myrpm.rpmmyrpm-extra.rpm .

job2 中,在我的工作区中,我看到 myrpm-3.0.0.1027-2018_12_21_121519.noarch.rpmmyrpm-extra-3.0.0.1027-2018_12_21_121519.noarch.rpm我通过一些 AQL 从 Artifactory 下载这些文件后得到的 rpm。

一旦从 Aritfactory 下载 rpm,即在 Jenkins 工作区中可用,然后我使用这个常见的下游作业来选择我需要的给定 rpm使用 "${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.

最佳答案

egrepgrep -E 相同,在您的情况下,使用的 regex 需要 -E-P 以支持 ?

请搜索不同的 regex 支持。有POSIXExtendedPerl

资源:
POSIX Basic and Extended Regular Expressions
Perl regular expressions
Regular expression

关于Ruby 或 Bash 或 Grep 正则表达式不适用于 '?',即前一个字符出现 0 次或 1 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54098116/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com