Как добавить значение JSON в файл JSON с помощью сценария Bash - PullRequest
1 голос
/ 10 июня 2019

JSON файл следующим образом:

{

      "ImageId": "ami-074acc26872f26463",
      "KeyName": "Accesskeypair",
      "SecurityGroupIds": ["sg-064caf9c470e4e8e6"],
      "InstanceType": ""
      "Placement": {
        "AvailabilityZone": "us-east-1a"
      }
}

чтение типа # вход от пользователя

Теперь я хочу добавить значение json в "InstanceType": "$ type" в файле, используя скрипт bash. Я пробовал sed, cat и echo

echo "Hello"
echo "lets create an instance"  
echo "please enter the type of instance you need"
read instance_type;
echo $type
 sed -a '|\InstanceType": "|$instance_type|a' awsspotinstancecreation.json
 sed -e '/\"InstanceType": "|$instance_type|/a' awsspotinstancecreation.json
 sed -i "/\InstanceType": "/ s/^\(.*\)\('\)/\1, $instance_type/" awsspotinstancecreation.json
 sed -e 's/^"InstanceType": "",.*$/"InstanceType": "$instance_type",/g' awsspotinstancecreation.json
 sed -i 's/^InstanceType .*$/"InstanceType": "$instance_type",/' awsspotinstancecreation.json
 sed -i 's:^"InstanceType": "",.*$:"InstanceType": "$instance_type",:a' awsspotinstancecreation.json

но когда я это делаю, появляется "InstanceType": "$ type" вместо "InstanceType": "t2.small"

Ответы [ 2 ]

2 голосов
/ 10 июня 2019

Вы можете использовать легковесные процессы JSON, называемые jq

, после загрузки файла вы можете использовать jq '.InstanceType = "Это значение экземпляра"

Вы можетевзять ссылку из Добавить новый элемент в существующий массив JSON, используя jq

0 голосов
/ 10 июня 2019
Опция

use -e не изменит файл, вместо этого он напечатает вывод в терминале. Опция

-i изменит файл.

при использовании .* regex обновитфайл и конкретный ключ, имеющие любое значение

и использующие \"\", будут искать только пустую строку и обновлять значение.

попробуйте это:

sed -i "s/\"InstanceType\":.*,$/\"InstanceType\": \"${instance_type}\",/g" awsspotinstancecreation.json

ИЛИ

sed -i "s/\"InstanceType\": \"\",$/\"InstanceType\": \"${instance_type}\",/g" awsspotinstancecreation.json

...