以下は私の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など)は、データモデルを理解するユーティリティによって処理される必要があります。などの行認識ツールに依存する場合sed
。awk
したがって、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 $