特定の値を変更したいjsonがありますが、ターミナルは常に変更された値でjsonを表示しますが、実際には特定のファイルの値を変更しません。サンプルJSON:
{
name: 'abcd',
age: 30,
address: 'abc'
}
ファイル自体のアドレスの値を変更したいのですが、今のところ変更できませんでした。私は使用してみました:
jq '.address = "abcde"' test.json
しかし、うまくいきませんでした。助言がありますか?
AFAIK jq
はインプレース編集をサポートしていないため、まず一時ファイルにリダイレクトしてから元のファイルを置き換えるか、moreutilsパッケージのsponge
ユーティリティを使用する必要があります。
jq '.address = "abcde"' test.json|sponge test.json
出力を変数e.t.cに保存するなど、「同じファイルにリダイレクトする」他の手法があります。 「Unix&Linux StackExchange」は、これについて詳しく知りたい場合に開始するのに適した場所です。
一時ファイルを使用します。インプレース編集を行うと主張するプログラムが実行していることです。
tmp=$(mktemp)
jq '.address = "abcde"' test.json > "$tmp" && mv "$tmp" test.json