特定のキーを見つけてシェルスクリプトで値を変更するには?

特定のキーを見つけてシェルスクリプトで値を変更するには?

次のテキストを含むJSONファイルがあります。

{"category": "yyy", "id": "xxxyyy", "environment": "fff", "client": "000000", "user": "Alex", "log_time": "xxx", "source_context": null}

userそのファイルでキーを見つけ、その値をまったく同じサイズ(=、=)Alexに置き換える必要があります。コマンドを試してみましたが、正しく動作しませんでした。XXXXAlexXXXXTomXXXsed

答え1

テキスト指向パーサー(例:)を使用しないでくださいsed。代わりにJSON対応パーサーを使用してください(例:jq

システムにこのツールがある場合は、単に次のことができます。

 jq '.user |= gsub(".";"X")' file

これにより、すべてのキー文字列がuser同じ数の文字Xに置き換えられます。

jqこれをサポートしていない場合は、次gsubのように使用できます。

jq '.user |= ([range(0;length)]|.[]="X"|add)' file

関連情報