我需要用一个已经有的变量替换“JaegerAgentHost”的值。
我在每个应用程序上都有多种格式的JSON。
APP1 JSON文件:
{
"Settings": {
"JaegerServiceSettings": {
"JaegerAgentHost": "jaeger.apps.internal",
"JaegerAgentPort": "6831"
} } }
APP2 JSON文件:
{
"JaegerServiceSettings": {
"JaegerAgentHost": "jaeger.apps.internal",
"JaegerAgentPort": "6831",
} }
App3 JSON文件:
{
"JaegerAgentHost": "jaeger.apps.internal",
"JaegerAgentPort": "6831"
}
不管JaegerAgentHost的键值路径如何,我都应该能够用我的变量替换它的值,最终应该变成如下所示
预期输出:
APP1 JSON文件:
{
"Settings": {
"JaegerServiceSettings": {
"JaegerAgentHost": "jaeger.app",
"JaegerAgentPort": "6831"
} } }
APP2 JSON文件:
{
"JaegerServiceSettings": {
"JaegerAgentHost": "jaeger.app",
"JaegerAgentPort": "6831",
}}
App3 JSON文件:
{
"JaegerAgentHost": "jaeger.app",
"JaegerAgentPort": "6831"
}
请建议我们如何做到这一点,当我有多个JSON文件,喜欢找到并取代与jq和bash的特定键值
到目前为止,我有多个命令来替换每个json文件,这不是最佳实践。
这阻碍了我为所有人制作一个共同的脚本。
我可以使用sed,但担心任何JSON文件可能发生的结构变化,因为它们不统一,我更喜欢jq。
1条答案
按热度按时间oknwwptz1#
一种方法是使用
walk
。假设$host保存所需的值,jq过滤器将是:
另一种方法是使用
..
和|=
:您可以使用
--arg
命令行选项传入值,例如。