Jqを使用してjsonファイルからデータを読み取ります。結果をyamlファイルに追加したいのですが、機能しません。私はシェルプログラミングにかなり慣れていません。私の目標は、その「ユーザー」をyamlファイルの既存の「ユーザー」配列に追加することです。
これは私のjsonファイルです:
#$DEFAULTS_FILE
{"users":
[
{"name":"pi",
"gecos": "Hypriot Pirate",
"Sudo":"ALL=(ALL) NOPASSWD:ALL",
"Shell": "/bin/bash",
"groups":"users,docker,video",
"plain_text_passwd":"pi",
"lock_passwd":"false",
"ssh_pwauth":"true",
"chpasswd": {"expire": false}
},
{"name":"admin",
"gecos": "Hypriot Pirate",
"Sudo":"ALL=(ALL) NOPASSWD:ALL",
"Shell": "/bin/bash",
"primary-group": "users",
"groups":"users,docker,adm,dialout,audio,plugdev,netdev,video",
"ssh-import-id":"None",
"plain_text_passwd":"pi",
"lock_passwd":"true",
"ssh_pwauth":"true",
"chpasswd": "{expire: false}",
"ssh-authorized-keys": ["ssh-rsa abcdefg1234567890 [email protected]"]
}
]
}
私はそれでそれをフィルタリングします:
cat $DEFAULTS_FILE | jq .users
そのjsonをyamlに変換する方法はわかりません。
私の期待される結果は:
users:
- name: pi
gecos: "Hypriot Pirate"
Sudo: ALL=(ALL) NOPASSWD:ALL
Shell: /bin/bash
groups: users,docker,video
plain_text_passwd: pi
lock_passwd: false
ssh_pwauth: true
chpasswd: { expire: false }
- name: admin
primary-group: users
Shell: /bin/bash
Sudo: ALL=(ALL) NOPASSWD:ALL
groups: users,docker,adm,dialout,audio,plugdev,netdev,video
ssh-import-id: None
yq
に似たjq
と呼ばれる2番目のツールを使用して、yamlファイルを書き込もうとしました。しかし、私には前向きな進展はありません。
[〜#〜]編集[〜#〜]
私はそれでコンテンツをyamlに追加できることを知っています:
yq w -i "my.yml" "users[+]" "some content"
しかし、私は私のjsonをそれにマージする方法を知りません。
どんな助けやヒントでもいいでしょう、事前にありがとう...
function yaml_validate {
python -c 'import sys, yaml, json; yaml.safe_load(sys.stdin.read())'
}
function yaml2json {
python -c 'import sys, yaml, json; print(json.dumps(yaml.safe_load(sys.stdin.read())))'
}
function yaml2json_pretty {
python -c 'import sys, yaml, json; print(json.dumps(yaml.safe_load(sys.stdin.read()), indent=2, sort_keys=False))'
}
function json_validate {
python -c 'import sys, yaml, json; json.loads(sys.stdin.read())'
}
function json2yaml {
python -c 'import sys, yaml, json; print(yaml.dump(json.loads(sys.stdin.read())))'
}
http://github.com/frgomes/bash-scripts のその他のBashトリック
別のワンライナー:
python -c 'import yaml, sys; print(yaml.dump(yaml.load(open(sys.argv[1])), default_flow_style=False))' input.json
(有効なjsonも有効なyamlであるという事実を利用する)
そしてjmlにyaml:
python -c 'import yaml, json, sys; print(json.dumps(yaml.load(open(sys.argv[1])), indent=2))' input.yaml