好的,所以我正在选择一个参数化的Jenkins作业。参数的选择是DEV
STAGING
QA
和PROD
的,它们存储在${ENV}
我需要更改变量${ENV}
以匹配 URL 中的字符串。我正在尝试使用正则表达式使用 sed 命令来执行此操作。可能吗?
我在 Expresso 中测试了PROD|ING|(?<!Q)A
作为正则表达式,它找到了必要的部分(A
、ING
、PROD
),如果我用 '' 替换它们,这将给我留下 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