杰森。如何在后面添加一句话:

杰森。如何在后面添加一句话:

以下是我的 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是这项工作的错误工具。正确的工具之一是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 .奥蒂加.json
解析错误:第 4 行第 23 列的文字无效
%

答案2

您可以使用它(使用i选项修改文件,但首先检查它是否正常工作):

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

它将首先将线分成两部分,然后匹配"KEY":,然后空格,然后用任何内容替换第二部分。

让我们说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 $ 

相关内容