sed 命令更改 .spec 文件中的值

sed command to change value in .spec file

如何使用 sed 更改 .spec 文件中的值?想要将构建的 $nmatch 值更改为其他值,例如 "build1.1".

{
"files": [
  {
    "aql": {
    "items.find": {
    "repo": {"$eq":"app-java-repo"},
    "path": "archives/test/app",
    "type": "folder",
    "$or": [
          {
            "$and": [
              {
                "name": {"$nmatch" : "*build*"} //change value using sed
              }
            ]
          }
        ]
      }
    }
  }
]
}

尝试了以下命令但没有用

sed -i -e '/name:/{s/\($nmatch\).*/: "'"build1.1"'" /}'

您的文档格式是json,所以您应该使用jq进行编辑:

jq '.files[0].aql."items.find"."$or"[0]."$and"[0].name."$nmatch"="build1.1"' spec

使用 sed,您无法可靠地访问正确的名称节点。您的代码不起作用,因为您没有在搜索模式中包含 name 周围的引号。如果您有 build 的唯一标识符,则可以使用 sed。示例:

sed -i 's/BUILD_NUMBER/build1.1/g' spec

一种更“间接”的方法是简单地用 $nmatch:

设置所有内容
jq '(.. | select(has("$nmatch"))? ) = "build1.1"' input.json