如何从shell脚本

时间:2015-11-04 20:15:33

标签: json linux shell unix

我有以下JSON文件test.json

{
            "run_list": ["recipe[cookbook-ics-op::setup_server]"],
            "props": {
                "install_home": "/inst1",
                             "tmp_dir": "/inst1/tmp",
                "user": "rven"
                }
}

从shell脚本中,我必须在props下添加2个属性。我不想先阅读现有的内容。然后加入它。任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

尝试sed:

sed -e 's/"props": {/"props": { "foo": "bar", "spam": "eggs",/' test.json

结果:

{
        "run_list": ["recipe[cookbook-ics-op::setup_server]"],
        "props": { "foo": "bar", "spam": "eggs",
            "install_home": "/inst1",
                         "tmp_dir": "/inst1/tmp",
            "user": "rven"
            }
}

答案 1 :(得分:0)

使用JSON感知工具,例如jq。要添加两个属性foobar

jq '.props.foo="hello" | .props.bar="bye"' <in.json >out.json

如果要对值使用shell变量:

foo=hello; bar=bye
jq --arg foo="$foo" \
   --arg bar="$bar" \
   '.props.foo=$foo | .props.bar=$bar' \
   <in.json >out.json

如果您希望能够使用shell变量指定两个键和值:

key=hello; val=world
jq --arg key="$key" \
   --arg val="$val" \
  '.props[$key]=$val' \
  <in.json >out.json