ジェイソン。後ろに文を追加するには:[閉じる]

ジェイソン。後ろに文を追加するには:[閉じる]

以下は私のjsonファイルから抜粋したものです。

 },
   {
    "name": "asdasd",
    "script": "dsad.js",
    "merge_logs": ture,
    "error_file": "/ofghfghgfh.log",
    "out_file": "/fghgfhfgg",
    "cwd": "",
    "autorestart": true,
    "log_date_format"  : "YYYY-MM-DD HH:mm Z",
    "env": {
    "NODE_ENV": "desa",
    "KEY": "VtZOiz0Qc4afFs6j+h2r"
    }
  }]

「KEY」の後にフレーズを追加したいです。現在の値を変更してください。

「sed」を試しましたが、行末に追加しました。

 sed '/KEY/s/$/1234/g' .json

「-i」オプションを使用してファイルを直接変更する必要があります。

答え1

sed操作に誤ったツールです。正しいツールの1つですjq

% 猫 wibble.json                               
[
  {
    "名前": "asdasd",
    "スクリプト": "dsad.js"
  },
  {
    "log_date_format": "YYYY-MM-DD HH:mm Z",
    "環境":{
            "NODE_ENV": "デサ",
            "キー": "VtZOiz0Qc4afFs6j+h2r"
    }
  }
]
% jq '.[1]."env"."KEY" = "1234"' wibble.json
[
  {
    "名前": "asdasd",
    "スクリプト": "dsad.js"
  },
  {
    "log_date_format": "YYYY-MM-DD HH:mm Z",
    "環境":{
      "NODE_ENV": "デサ",
      「キー」:「1234」
    }
  }
]
%

JSONが実際には無効であることがわかりました。

%jq.ortiga.json
解析エラー:行4、列23のテキストが正しくありません。
%

答え2

これを使用できます(iオプションを使用してファイルを変更しますが、最初に機能していることを確認してください)。

sed -E 's/("KEY":) (".*")/\1 anything/g' .json

まず、行を2つの部分に分割し、一致し、"KEY":スペースを指定してから、2番目の部分を別の部分に置き換えます。

たとえば、見てみましょうKEY='"1234"'(一重引用符を使用すると、KEYの値はになります"1234")。これで使用する準備が整いました。

sed -E "s/(\"KEY\":) (\".*\")/\1 $KEY/g" .json

答え3

入れ子になった構造(xml、html、jsonなど)は、データモデルを理解するユーティリティによって処理される必要があります。などの行認識ツールに依存する場合sedawk

したがって、JSON入力はJSON認識ツールで処理する必要があります。 jqの答えはすでに提供されています。これは以下に基づく代替ソリューションです。jtc:

bash $ cat file.json | jtc -w'<KEY>l' -eu echo '"1234"' \;
{
   "autorestart": true,
   "cwd": "",
   "env": {
      "KEY": "1234",
      "NODE_ENV": "desa"
   },
   "error_file": "/ofghfghgfh.log",
   "log_date_format": "YYYY-MM-DD HH:mm Z",
   "merge_logs": true,
   "name": "asdasd",
   "out_file": "/fghgfhfgg",
   "script": "dsad.js"
}
bash $ 

関連情報