Json jq:替换特定条目上的字符串

Json jq:替换特定条目上的字符串,json,Json,我正在尝试用以下文件中的$val值替换字符串-某些_字符串(可以是任何字符串) more daemon.json { "insecure-registries": ["some_string:4000"] ,"registry-mirrors": ["http://some_string:4000"] ,"log-driver": "json-file"

我正在尝试用以下文件中的
$val
值替换字符串-
某些_字符串(可以是任何字符串)

more daemon.json
{
    "insecure-registries": ["some_string:4000"]
    ,"registry-mirrors": ["http://some_string:4000"]
    ,"log-driver": "json-file"
    ,"log-opts": {
        "max-size": "10m",
        "max-file": "3"
    }
}
是否可以用
jq
进行替换?在条目上-
不安全的注册表
注册表镜像

或者如果不是
perl
一行或
sed
也可以

val=MG_SERVER.carpool.com

more daemon.json
{
    "insecure-registries": ["MG_SERVER.carpool.com:4000"]
    ,"registry-mirrors": ["http://MG_SERVER.carpool.com:4000"]
    ,"log-driver": "json-file"
    ,"log-opts": {
        "max-size": "10m",
        "max-file": "3"
    }
}

只需指定jq语句中的更改,并用|分隔,因此:

jq '."insecure-registries"=["MG_SERVER.carpool.com:4000"] | ."registry-mirrors"=["http://MG_SERVER.carpool.com:4000"]' > daemon.json.tmp && mv -f daemon.json.tmp daemon.json 
如果要更改的文本包含在变量中,则可以使用jq的-arg标志,因此假设要更改的文本分别存储在变量val1和val2中:

jq --arg val1 "$val1" --arg val2 "$val2" '."insecure-registries"=[$val1] | ."registry-mirrors"=[$val2]' > daemon.json.tmp && mv -f daemon.json.tmp daemon.json

将更改输出到临时json文件,然后将临时文件移动到daemon.json以写入更改。

您尝试了什么?@Judy-您的问题的答案是:是。事实上,jq将是一个很好的选择。如果我想用$val来代替,除了$val之外,我还想用MG_SERVER.carpool.comdose jq呢?是的。我已经修改了答案如果解决方案有效,请花时间接受它作为答案。
.key=[$val]
.key[]=$val
更有意义。