在groovy中使用sed替换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

我有一个包含以下内容的json文件:

"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
"""