我有一个conf文件,如下所示
{
"files": [
{
"paths": ["/srv/log/*"],
"fields": { "type": "appLog", "app": "my_app", "env": "integration", "server": "" }
},
{
"paths": ["/srv/log/tomcat7/*"],
"fields": { "type": "tomcat", "app": "my_app", "env": "integration", "server": "" }
},
{
"paths": ["/srv/log/nginx/*"],
"fields": { "type": "nginxLog", "app": "my_app", "env": "integration", "server": "" }
}
]
}
我必须通过存储在变量中的shell脚本显式定义服务器。这意味着我需要将“服务器”之后的“”服务器添加到另一个脚本中,例如:$ host = my_machine.test.net,说这个服务器地址需要通过我的shell脚本添加到conf文件中。因此,当我运行我的脚本时,上面的内容变为
{
"files": [
{
"paths": ["/srv/log/*"],
"fields": { "type": "appLog", "app": "my_app", "env": "integration", "server": "my_machine.test.net" }
},
{
"paths": ["/srv/log/tomcat7/*"],
"fields": { "type": "tomcat", "app": "my_app", "env": "integration", "server": "my_machine.test.net" }
},
{
"paths": ["/srv/log/nginx/*"],
"fields": { "type": "nginxLog", "app": "my_app", "env": "integration", "server": "my_machine.test.net" }
}
]
}
我尝试使用“sed -i”但无法使其正常工作。有人可以帮忙。
答案 0 :(得分:4)
配置文件是一个json文档。使用jq
进行修改:
jq --arg server 'my.server.net' '.files[].fields.server=$server' conf.json
要更改文件:
mv conf.json conf.backup.json
jq --arg server 'my.server.net' '.files[].fields.server=$server' conf.json > new
mv new conf.json
答案 1 :(得分:-3)
使用sed
:
sed -i 's/""/"my_machine.test.net"/' file
或bash脚本:
$ cat script.sh
#!/bin/bash
sed -i "s/\"\"/\"$1\"/g" file
使用方法:
$ ./script.sh my_machine.test.net