Tengo un archivo JSON, estoy tratando de cambiar un valor particular usando un script.
"foo-bar": "baz",Se establece como baz en este ejemplo, pero en la práctica no sé cuál es este valor.
Quiero cambiar el valor de foo-bar desde un script más grande.
"foo-bar": "qux",Lo intenté
$var='qux' jq --arg passvar ${var} '{"foo-bar":$passvar}' file.jsonObtengo la salida correcta en la terminal
{ "foo-bar": "qux" }Pero cuando reviso el contenido real del archivo usando vim, obtengo
"foo-bar": "baz", jq no quiere guardar el nuevo archivo.json? ¿O es una vista previa de algún tipo? ¿Qué me estoy perdiendo? ¿Hay una mejor manera que jq para actualizar/establecer valores en un archivo json?
* editado para agregar un guión a la variable inicial, ahora es foo-bar en lugar de solo foo.
Según la documentación:
La(s) salida(s) del filtro se escriben en la salida estándar
Por lo tanto, debe redirigir la salida al archivo que desee.
jq --arg passvar ${var} '{"foo":$passvar}' file.json > newfile.jsonLa verdadera respuesta está aquí https://stackoverflow.com/a/42718624/1286903
tmp=$(mktemp) jq --arg p "$p" '."foo-bar" = $p' file.json > "$tmp" && mv "$tmp" file.json '."foo-bar" es la clave que desea editar.
Necesita hacer uso de un archivo temporal para hacer esto. Además, tenga en cuenta las comillas cuando sus variables tengan guiones.