json - 使用 sub() 函数有条件地更改 jq 中的 JSON 值
问题描述
我需要更改 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-call 可以满足我的需要:
jq '. ._meta.hostvars[].ansible_ssh_pass |= sub(" .*";"" )'
推荐阅读
- angular - 401响应的角度关闭模式
- vim - 如何让vim检测到
与 konsole 终端? - firebase - 如何在 Firestore 中按顺序执行批量写入
- java - Spring 集成聚合器节流器
- javascript - 如何使用 JavaScript 将二进制有效负载转换为 JSON 键值对?
- jrepl - jrepl - 如何只打印出第一个修改的行
- websocket - 我们可以同时从不同的地理位置运行 Jmeter 测试吗?
- algorithm - 单纯形算法在线性规划中移动原点
- suitescript - 保存记录时如何忽略必填列字段?
- django - 为响应行为实现 Django 中间件