使用 zsh 更改 json 文件中的值
Change a value in a json file using zsh
我有一个 JSON 文件,我正在尝试使用脚本更改其中的特定值。
"foo-bar": "baz",
本例中设置为baz,实际中不知道这个值是多少
我想在更大的脚本中更改 foo-bar
的值。
"foo-bar": "qux",
我试过了
$var='qux'
jq --arg passvar ${var} '{"foo-bar":$passvar}' file.json
我在终端得到正确的输出
{
"foo-bar": "qux"
}
但是当我使用 vim 检查实际文件内容时,我得到
"foo-bar": "baz",
jq
不想保存新的file.json?或者这是某种预览?
我错过了什么? json 文件中的 update/set 值是否有比 jq
更好的方法?
*编辑为初始变量添加破折号,现在是 foo-bar 而不是 foo。
根据文档:
The output(s) of the filter are written to standard out
因此,您需要将输出重定向到您想要的任何文件。
jq --arg passvar ${var} '{"foo":$passvar}' file.json > newfile.json
真正的答案在这里
tmp=$(mktemp)
jq --arg p "$p" '."foo-bar" = $p' file.json > "$tmp" && mv "$tmp" file.json
'."foo-bar"
是您要编辑的密钥。
您需要使用临时文件来执行此操作。另外,当您的变量有破折号时,请注意引号。
我有一个 JSON 文件,我正在尝试使用脚本更改其中的特定值。
"foo-bar": "baz",
本例中设置为baz,实际中不知道这个值是多少
我想在更大的脚本中更改 foo-bar
的值。
"foo-bar": "qux",
我试过了
$var='qux'
jq --arg passvar ${var} '{"foo-bar":$passvar}' file.json
我在终端得到正确的输出
{
"foo-bar": "qux"
}
但是当我使用 vim 检查实际文件内容时,我得到
"foo-bar": "baz",
jq
不想保存新的file.json?或者这是某种预览?
我错过了什么? json 文件中的 update/set 值是否有比 jq
更好的方法?
*编辑为初始变量添加破折号,现在是 foo-bar 而不是 foo。
根据文档:
The output(s) of the filter are written to standard out
因此,您需要将输出重定向到您想要的任何文件。
jq --arg passvar ${var} '{"foo":$passvar}' file.json > newfile.json
真正的答案在这里
tmp=$(mktemp)
jq --arg p "$p" '."foo-bar" = $p' file.json > "$tmp" && mv "$tmp" file.json
'."foo-bar"
是您要编辑的密钥。
您需要使用临时文件来执行此操作。另外,当您的变量有破折号时,请注意引号。