使用sub()函数有条件地更改jq中的JSON值
我需要修改JSON数据中的一些值,并希望将其包含在已经存在的shell脚本中。我正试图使用jq来实现这一点,需要使用“sub()”函数来切断字符串值的一部分 使用此命令行:使用sub()函数有条件地更改jq中的JSON值,json,shell,jq,Json,Shell,Jq,我需要修改JSON数据中的一些值,并希望将其包含在已经存在的shell脚本中。我正试图使用jq来实现这一点,需要使用“sub()”函数来切断字符串值的一部分 使用此命令行: jq '._meta[][].ansible_ssh_pass | sub(" .*" ; "")' 使用下面的数据将正确地替换该值(删除任何内容,包括数据中的第一个空格),但只打印出该值,而不是完整的JSON结构 下面是JSON数据示例: {_meta": { "hostvars": { "10.1.
jq '._meta[][].ansible_ssh_pass | sub(" .*" ; "")'
使用下面的数据将正确地替换该值(删除任何内容,包括数据中的第一个空格),但只打印出该值,而不是完整的JSON结构
下面是JSON数据示例:
{_meta": {
"hostvars": {
"10.1.1.3": {
"hostname": "core-gw1",
"ansible_user": "",
"ansible_ssh_pass": "test123 / ena: test2",
"configsicherung": "true",
"os": "ios",
"managementpaket": ""
}
}
}}
输出应该如下所示:
{"_meta": {
"hostvars": {
"10.1.1.3": {
"hostname": "core-gw1",
"ansible_user": "",
"ansible_ssh_pass": "test123",
"configsicherung": "true",
"os": "ios",
"managementpaket": ""
}
}
}}
我假设我必须添加一些基于“如果……那么”的参数,但我无法让jq理解我;)手册有点粗略,我还没有找到与我需要做的事情相匹配的任何示例…好的,像往常一样。。。一旦你发布了一个公开问题,你就可以自己设法找到解决方案……;) 这个jq电话满足了我的需要:
jq '. ._meta.hostvars[].ansible_ssh_pass |= sub(" .*";"" )'
您不需要
sub
在这里,\u meta.hostvars[].ansible\u ssh\u pass |=(./)[0]
将与jq一起使用,无论是否使用oniguruma。