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
更有意义。