2017-03-10 4 views
4

を使用してJSONでキーと値を変更します。サンプルjson:は私が特定の値を変更したいが、端末は常に変更された値とJSONを表示するが、それは実際には特定のファイルの値を変更しないでJSONを持っているJQ

{ 
    name: 'abcd', 
    age: 30, 
    address: 'abc' 
} 

私はファイル自体のアドレスの値を変更したいと思いますが、これまではできませんでした。私は使用しようとしました:

jq '.address = "abcde"' test.json 

しかし、それは動作しませんでした。助言がありますか?

+0

だけでリダイレクトを使用します。 'jq '.address =" abcde "' test.json> test.json' – Aserre

+0

jsonにはもうデータが残っていません。 – wolfsbane

+0

Wooops、申し訳ありません、私は 'bash'の同じファイルにリダイレクトするのを忘れて、元のファイルを削除します。 – Aserre

答えて

8

私の知る限りjqは、インプレース編集をサポートしていないので、あなたは最初の一時ファイルにリダイレクトし、それを使って元のファイルを置き換える、またはそのよう、moreutilsパッケージからspongeユーティリティを使用する必要があります。

jq '.address = "abcde"' test.json|sponge test.json 

変数に出力を保存するなど、「同じファイルにリダイレクトする」他の手法もあります"Unix & Linux StackExchange"は、これについてもっと知りたい場合には、開始するのに適しています。

+0

それは働いた。ありがとう! – wolfsbane

7

一時ファイルを使用します。これは、インプレース編集を行うと主張するプログラムが何をしているかです。

tmp=$(mktemp) 
jq '.address = "abcde"' test.json > "$tmp" && mv "$tmp" test.json 
+0

それは働いた。ありがとう! – wolfsbane

関連する問題