在groovy中使用sed替换json文件中的值
我有一个包含以下内容的json文件:在groovy中使用sed替换json文件中的值,groovy,sed,jenkins-pipeline,Groovy,Sed,Jenkins Pipeline,我有一个包含以下内容的json文件: "containerDefinitions": [ { "image": "***.dkr.ecr.us-east-1.amazonaws.com/xyz" } ] 现在我想用一个新值替换图像的url。因此,在我的jenkins脚本groovy文件中,我将这个现有的url值存储在某个变量下,然后输入新的url值,该值由构建编号追加。因此,我尝试做以下工作: newimageurl="\"***.dkr.ecr.us-east-1.amazo
"containerDefinitions": [
{
"image": "***.dkr.ecr.us-east-1.amazonaws.com/xyz"
}
]
现在我想用一个新值替换图像的url。因此,在我的jenkins脚本groovy文件中,我将这个现有的url值存储在某个变量下,然后输入新的url值,该值由构建编号追加。因此,我尝试做以下工作:
newimageurl="\"***.dkr.ecr.us-east-1.amazonaws.com/xyz:v_$BUILD_NUMBER\""
oldimageurl="\"***.dkr.ecr.us-east-1.amazonaws.com/xyz\""
sed -i -e 's#'"$oldimageurl"'#'"$newimageurl"'#' ./myfile.json
但它的结尾是错误的,v_$BUILD\u编号
的newimageurl语法和sed命令语法
如何解决这个问题?在groovy中定义字符串变量时,不需要添加双引号。此外,插值中存在错误。您将执行以下操作:
newimageurl = "***.dkr.ecr.us-east-1.amazonaws.com/xyz:v_${BUILD_NUMBER}"
oldimageurl = "***.dkr.ecr.us-east-1.amazonaws.com/xyz"
在sed
命令中(也必须将其放入sh
命令中):
您可能需要转义
$
字符,否则它将匹配行尾。谢谢mouviciel。但是,您指的是转义$char的位置。$BUILD\u NUMBER
在环境对象映射中,因此它必须是env.BUILD\u NUMBER
。此外,这些都是在字符串中插入的,因此您可能需要将它们括起来,如${env.BUILD_NUMBER}
,${oldimageurl}
,等等。之后可能还会有一些问题,但这将使您从正确的方向开始。
sh """
sed -i -e 's#${oldimageurl}#${newimageurl}#' ./myfile.json
"""