通过shell脚本

时间:2017-06-14 11:43:15

标签: linux bash shell unix sh

我有一个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”但无法使其正常工作。有人可以帮忙。

2 个答案:

答案 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