次のtest.jsonファイルの “domain_name”: “lab.sasapea.mydns.jp” である配列の複数の項目を同時に書き換える方法を試してみた。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
{ "cert_list": [ { "default": false, "domain_name": "Support", "name": "asustor.com", "issuer_name": "support@asustor.com", "type": 0, "valid_time": 1940425810, "update_time": 0, "valid_time_week": 0, "valid_time_daily": 1647238633 }, { "default": true, "name": "Let's Encrypt", "domain_name": "lab.sasapea.mydns.jp", "issuer_name": "R3", "type": 3, "valid_time": 1694137272, "valid_time_week": 1686376397, "valid_time_daily": 1686376397, "update_time": 0, "update": true } ] } |
一個のみ書き換える場合は次の方法が簡単だ。
jqコマンドで指定したキーが特定の値を持つ配列のみキーの置換(書き換え)を行う
1 |
cat test.json | jq '(.cert_list[] | select(.domain_name == "lab.sasapea.mydns.jp") | .valid_time) |= 123' |
で、次のようにしてみたら複数同時に書き換えできた...けど、これであってる?(-_-;)
1 |
cat test.json | jq '{"cert_list":[.cert_list[] | (select(.domain_name == "lab.sasapea.mydns.jp") | .valid_time |= 1 | .valid_time_week |= 2 | .valid_time_daily |= 3) // .]}' |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
{ "cert_list": [ { "default": false, "domain_name": "Support", "name": "asustor.com", "issuer_name": "support@asustor.com", "type": 0, "valid_time": 1940425810, "update_time": 0, "valid_time_week": 0, "valid_time_daily": 1647238633 }, { "default": true, "name": "Let's Encrypt", "domain_name": "lab.sasapea.mydns.jp", "issuer_name": "R3", "type": 3, "valid_time": 1, "valid_time_week": 2, "valid_time_daily": 3, "update_time": 0, "update": true } ] } |
以上、忘備録でした。