私はjqを使ってjsonファイルを読み込み、ファイルのきれいなバージョンを書くシェルスクリプトを書いています。
cat input.json | jq . > pretty.json
cp pretty.json ./input.json
rm pretty.json
2行と3行が必要な理由は次のとおりです。
cat input.json | jq . > input.json
ファイルを空白のままにすると、一時ファイルを使用せずにshell / jqを使用してファイルを美しくする方法はありますか?
ベストアンサー1
jq
いいえ、ファイルを処理して結果を生ファイルに出力することはできません。
次のように一時ファイルを使用できます。
cp file.json file.json.tmp &&
jq . file.json.tmp >file.json &&
rm file.json.tmp
この一連の操作は、元のファイルのメタデータも保存します。各ステップは、前のステップが正常に完了したかどうかに依存するため、たとえば、&&
実行が失敗しても文書は失われません。jq
sponge
GNU(ソフトウェアパッケージの一部)などのツールを使用して、moreutils
一時ファイルを処理する手作業を非表示にできます。
jq . file.json | sponge file.json
これはまだ背後に一時ファイルを使用していることに注意してください。
2つのバリエーションのうち、jq
パーティションが突然いっぱいになったり、正しく実行されなかった場合(入力文書の可用性またはエラーのため)、3つのコマンドの最初のセットだけがデータの損失を防ぐことができます。