在 jenkins 上使用带有 sed 的多案例正则表达式



好的,所以我正在选择一个参数化的Jenkins作业。参数的选择是DEV STAGING QAPROD的,它们存储在${ENV}

我需要更改变量${ENV}以匹配 URL 中的字符串。我正在尝试使用正则表达式使用 sed 命令来执行此操作。可能吗?

我在 Expresso 中测试了PROD|ING|(?<!Q)A作为正则表达式,它找到了必要的部分(AINGPROD),如果我用 '' 替换它们,这将给我留下 DEV QA STG 或 '' 作为我的变量值,然后我会在它的末尾添加一些东西。

当我尝试运行echo "DEVSTAGINGQAPROD" | sed "s/PROD|ING|(?<!Q)A//g"以删除 CentOS 上的这些字符时,它会返回-bash: !Q: event not found .我希望它返回DEVSTGQA

echo "DEVSTAGINGQAPROD" | sed "s/PROD|ING//g按原样返回DEVSTAGQA。我似乎遇到的问题是后面的外观,只有在 A 之前没有 Q 时才删除它。

任何想法如何使这项工作?

这里的一个问题是 sed 不理解负面的回望。另一个是您选择的报价。默认情况下,在 shell 中启用历史记录扩展,因此!具有特殊含义,必须在双引号内进行转义。

为了解决第一个问题,我建议使用 Perl 而不是 sed,因为它有一个更高级的正则表达式引擎。对于第二个,只需使用单引号,其中!将从字面上解释:

$ echo "DEVSTAGINGQAPROD" | perl -pe 's/PROD|ING|(?<!Q)A//g'
DEVSTGQA

最新更新