Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用sub()函数有条件地更改jq中的JSON值_Json_Shell_Jq - Fatal编程技术网

使用sub()函数有条件地更改jq中的JSON值

使用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.

我需要修改JSON数据中的一些值,并希望将其包含在已经存在的shell脚本中。我正试图使用jq来实现这一点,需要使用“sub()”函数来切断字符串值的一部分

使用此命令行:

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。