如何将读取值变量附加到其中带有双引号的文件

时间:2019-06-10 05:24:39

标签: bash shell

我想将变量写入JSON文件。

我尝试了许多sed命令,但仍然找不到解决方法

#! bin/bash   

echo "Hello"
echo "lets create an instance"

read -p "please enter the type of instance you need: " instance_type

echo $instance_type | sed -i "s|""InstanceType"": """"|""InstanceType"": 
""${instance_type}""|g" awsspotinstancecreation.json
roxor@ubuntu:~$ bash rough.sh

Hello

lets create an instance

please enter the type of instance you need: t2.small

{
      "ImageId": "ami-074acc26872f26463",

      "KeyName": "Accesskeypair",

      "SecurityGroupIds": ["sg-064caf9c470e4e8e6"],

      **##"InstanceType": "${instance_type}",##**

      "Placement": {
        "AvailabilityZone": "us-east-1a"
      }
}

2 个答案:

答案 0 :(得分:1)

您的sed存在引用问题以及尝试同时从文件和STDIN读取数据的问题。

使用sedgrepawk等面向行的工具来解析或修改JSON通常是一个坏主意。最好的基于shell的工具是jq

jq 1.5 +:

read -p "Instance type: " instance
export instance
jq '.InstanceType=env.instance' awsspotinstancecreation.json

jq 1.4 +:

read -p "Instance type: " instance
jq --arg instance "$instance" '.InstanceType=$instance' awsspotinstancecreation.json

答案 1 :(得分:-1)

您可以尝试使用mustache。正是出于这个目的。这是bash的实现。

从他们的网站选择

Hello, {{NAME}}.

I hope your {{TIME_PERIOD}} was fun.

命令

NAME=Tyler TIME_PERIOD=weekend ./mo demo/fun-trip.mo

输出

Hello, Tyler.

I hope your weekend was fun.

只要分隔符清楚,文本是JSON还是纯文本都没有关系。大多数实现还为您提供了更改定界符的选项。