シェルを使用してjsonファイルの大部分を見つけて置き換える必要があります。たとえば、次のファイルがあります。
{
"Balise1": true,
"Balise2": true,
"OtherThingEnabled": false,
"proxySettings": {
"port": 0
},
"mailSettings": {},
"maxRunningActivitiesPerJob": 5,
"maxRunningActivities": 5,
}
括弧内の内容を消去する必要があります。「プロキシ設定」次に交換してください。
"proxySettings": {
"host": "my-proxy.host.com",
"port": 80
}
ファイルの先頭に数行があることを確認できません。一つであっても、複数であってもなくてもよい。私が確信する唯一のものは括弧だけです。正しくインデントする必要があります。
redexを使用してsed関数を調べましたが、不明な行数に遭遇しました。
助けてもらえますか?ありがとう
ベストアンサー1
JSONプロセッサのjq
使用
jq '.proxySettings = { host: "my-proxy.host.com", port: 80 }' file.json
これにより、proxySettings
セクションが指定された値に設定され、以前にそのキーに関連付けられている他の値(存在する場合)が上書きされます。
コマンドラインから2つの値を渡すには(おそらくシェル変数で)、次を使用します。
myproxy=my-proxy.host.com
myport=80
jq --arg host "$myproxy" --argjson port "$myport" '.proxySettings = { host: $host, port: $port }' file.json
またはより短い
myproxy=my-proxy.host.com
myport=80
jq --arg host "$myproxy" --argjson port "$myport" '.proxySettings = $ARGS.named' file.json
最後のバリアントは、2つのキーとコマンドラインで指定された値を含む内部jq
オブジェクトを生成します。このオブジェクトは入力文書のセクションに割り当てられます。$ARGS.named
host
port
proxySettings
--arg
ホスト名とポート番号を使用する理由--argjson
は、ホスト名はJSON文字列でエンコードする必要がある文字列ですが、ポート番号はJSON文字列でエンコードしないでください。
全ての場合において、結果は標準出力に記録される。新しいファイル名にリダイレクトするか、パイプを介して元のsponge file.json
ファイルを出力で上書きします。