un procesador YAML, JSON y XML de línea de comandos liviano y portátil. yq
usa una sintaxis similar a jq pero funciona con archivos yaml, así como con json, xml, properties, csv y tsv. Todavía no admite todo lo que hace jq
, pero sí admite las operaciones y funciones más comunes, y se agregan más continuamente.
yq está escrito en go, por lo que puedes descargar un binario libre de dependencias para tu plataforma y ¡listo! Si lo prefiere, hay una variedad de administradores de paquetes que se pueden usar, además de Docker y Podman, todos los cuales se enumeran a continuación.
Leer un valor:
yq '.ab[0].c' archivo.yaml
Tubería de STDIN:
yq '.ab[0].c' < archivo.yaml
Actualizar un archivo yaml, en su lugar
yq -i '.ab[0].c = archivo "cool"'.yaml
Actualizar usando variables de entorno
NOMBRE=mike yq -i '.ab[0].c = strenv(NOMBRE)' archivo.yaml
Fusionar varios archivos
# fusionar dos archivosyq -n 'load("file1.yaml") * load("file2.yaml")'# fusionar usando globs:# tenga en cuenta el uso de `ea` para evaluar todos los archivos a la vez# en lugar de en secuenciayq ea'. como $item ireduce ({}; . * $item )' ruta/a/*.yml
Varias actualizaciones de un archivo yaml
yq -i ' .ab[0].c = "genial" | .xyz = "foobar" | .persona.nombre = strenv(NOMBRE)' archivo.yaml
Busque y actualice un elemento en una matriz:
yq '(.[] | select(.name == "foo") | .address) = "12 cat st"'
Convertir JSON a YAML
yq -Poy muestra.json
Consulte las recetas para obtener más ejemplos y la documentación para obtener más información.
Eche un vistazo a las discusiones para encontrar preguntas comunes e ideas interesantes.
Utilice wget para descargar binarios precompilados comprimidos con gzip:
Por ejemplo, VERSIÓN=v4.2.0 y BINARIO=yq_linux_amd64
wget https://github.com/mikefarah/yq/releases/download/${VERSION}/${BINARY}.tar.gz -O - | tar xz && mv ${BINARIO} /usr/bin/yq
wget https://github.com/mikefarah/yq/releases/download/${VERSION}/${BINARY} -O /usr/bin/yq && chmod +x /usr/bin/yq
wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -O /usr/bin/yq && chmod +x /usr/bin/yq
Usando cerveza casera
brew install yq
snap install yq
yq
se instala con un estricto confinamiento en snap, esto significa que no tiene acceso directo a los archivos raíz. Para leer archivos raíz puede:
sudo cat /etc/myfile | yq '.a.path'
Y para escribir en un archivo raíz puedes usar esponja:
sudo cat /etc/myfile | yq '.a.path = "value"' | sudo sponge /etc/myfile
o escribir en un archivo temporal:
sudo cat /etc/myfile | yq '.a.path = "value"' | sudo tee /etc/myfile.tmp sudo mv /etc/myfile.tmp /etc/myfile rm /etc/myfile.tmp
docker run --rm -v "${PWD}":/workdir mikefarah/yq [comando] [banderas] [expresión] ARCHIVO...
Tenga en cuenta que puede ejecutar yq
en la ventana acoplable sin acceso a la red ni otros privilegios si lo desea, es decir --security-opt=no-new-privileges --cap-drop all --network none
.
podman run --rm -v "${PWD}":/workdir mikefarah/yq [comando] [banderas] [expresión] ARCHIVO...
Deberá pasar el indicador -i--interactive
a la ventana acoplable:
docker run -i --rm mikefarah/yq '.this.thing' < myfile.yml
podman run -i --rm mikefarah/yq '.esta.cosa' < miarchivo.yml
ventana acoplable ejecutar --rm -it -v "${PWD}":/workdir --entrypoint sh mikefarah/yq
podman ejecuta --rm -it -v "${PWD}":/workdir --entrypoint sh mikefarah/yq
Puede resultar útil tener una función bash para evitar escribir todo el comando de la ventana acoplable:
yq() { ventana acoplable ejecutar --rm -i -v "${PWD}":/workdir mikefarah/yq "$@"}
yq() { podman ejecuta --rm -i -v "${PWD}":/workdir mikefarah/yq "$@"}
La imagen del contenedor de yq
ya no se ejecuta bajo la raíz (#860). Si desea instalar más cosas en la imagen del contenedor, o tiene problemas de permisos al intentar leer/escribir archivos, necesitará:
docker run --user="root" -it --entrypoint sh mikefarah/yq
podman run --user="root" -it --entrypoint sh mikefarah/yq
O, en su Dockerfile:
FROM mikefarah/yq USER root RUN apk add --no-cache bash USER yq
De forma predeterminada, la imagen alpina que utiliza yq no incluye datos de zona horaria. Si desea utilizar el operador tz
, deberá incluir estos datos:
FROM mikefarah/yq USER root RUN apk add --no-cache tzdata USER yq
Si está utilizando podman con SELinux, deberá configurar el indicador de volumen compartido :z
en el montaje del volumen:
-v "${PWD}":/workdir:z
- name: Set foobar to cool uses: mikefarah/yq@master with: cmd: yq -i '.foo.bar = "cool"' 'config.yml' - name: Get an entry with a variable that might contain dots or spaces id: get_username uses: mikefarah/yq@master with: cmd: yq '.all.children.["${{ matrix.ip_address }}"].username' ops/inventories/production.yml - name: Reuse a variable obtained in another step run: echo ${{ steps.get_username.outputs.result }}
Consulte https://mikefarah.gitbook.io/yq/usage/github-action para obtener más información.
go install github.com/mikefarah/yq/v4@latest
Sin embargo, dado que cuentan con el respaldo de la comunidad ❤️, es posible que estén desactualizados con respecto a las versiones admitidas oficialmente.
Tenga en cuenta que el paquete Debian (anteriormente compatible con @rmescandon) ya no se mantiene. Utilice un método de instalación alternativo.
Pague yq
en x-cmd: https://x-cmd.com/mod/yq
Resultados instantáneos: vea el resultado de su filtro yq en tiempo real.
Manejo de errores: ¿Encontró un error de sintaxis? Mostrará el mensaje de error y los resultados del filtro válido más cercano.
¡Gracias @edwinjhlee!
nix profile install nixpkgs#yq-go
ver aquí
webi yq
Ver webi Compatible con @adithyasunil26 (https://github.com/webinstall/webi-installers/tree/master/yq)
pacman -S go-yq
Usando chocolate
choco install yq
Con el apoyo de @chillum (https://chocolatey.org/packages/yq)
usando pala
scoop install main/yq
Usando ala
winget install --id MikeFarah.yq
Usando puertos Mac
sudo port selfupdate sudo port install yq
Con el apoyo de @herbygillot (https://ports.macports.org/maintainer/github/herbygillot)
Alpine Linux v3.20+ (y Edge):
apk add yq-go
Alpine Linux hasta v3.19:
apk add yq
Con el apoyo de Tuan Hoang (https://pkgs.alpinelinux.org/packages?name=yq-go)
Flox se puede utilizar para instalar yq en Linux, MacOS y Windows a través de WSL.
flox install yq
Documentación detallada con muchos ejemplos.
Escrito en formato portátil, para que puedas descargar un encantador binario gratuito
Utiliza una sintaxis similar a jq
pero funciona con archivos YAML, JSON y XML.
Totalmente compatible con archivos yaml de varios documentos
Admite bloques frontales de yaml (por ejemplo, jekyll/assemble)
Salida yaml coloreada
Manipulación y formato de fecha/hora con TZ
Estructuras de datos profundamente
Claves de clasificación
Manipule comentarios, estilos, etiquetas, anclajes y alias de yaml.
Actualización en marcha
Expresiones complejas para seleccionar y actualizar.
Mantiene el formato yaml y los comentarios al actualizar (aunque hay problemas con los espacios en blanco)
Decodificar/codificar datos base64
Cargar contenido de otros archivos
Convertir a/desde json/ndjson
Convertir a/desde xml
Convertir a/desde propiedades
Convertir a/desde csv/tsv
Scripts generales de finalización de shell (bash/zsh/fish/powershell)
Reducir para fusionar varios archivos o sumar una matriz u otras cosas sofisticadas.
Acción de Github para usar en su proceso automatizado (gracias @devorbitus)
Consulte la documentación para un uso más detallado y avanzado.
Usage: yq [flags] yq [command] Examples: # yq defaults to 'eval' command if no command is specified. See "yq eval --help" for more examples. yq '.stuff' < myfile.yml # outputs the data at the "stuff" node from "myfile.yml" yq -i '.stuff = "foo"' myfile.yml # update myfile.yml in place Available Commands: completion Generate the autocompletion script for the specified shell eval (default) Apply the expression to each document in each yaml file in sequence eval-all Loads _all_ yaml documents of _all_ yaml files and runs expression once help Help about any command Flags: -C, --colors force print with colors -e, --exit-status set exit status if there are no matches or null or false is returned -f, --front-matter string (extract|process) first input as yaml front-matter. Extract will pull out the yaml content, process will run the expression against the yaml content, leaving the remaining data intact --header-preprocess Slurp any header comments and separators before processing expression. (default true) -h, --help help for yq -I, --indent int sets indent level for output (default 2) -i, --inplace update the file in place of first file given. -p, --input-format string [yaml|y|xml|x] parse format for input. Note that json is a subset of yaml. (default "yaml") -M, --no-colors force print with no colors -N, --no-doc Don't print document separators (---) -n, --null-input Don't read input, simply evaluate the expression given. Useful for creating docs from scratch. -o, --output-format string [yaml|y|json|j|props|p|xml|x] output format type. (default "yaml") -P, --prettyPrint pretty print, shorthand for '... style = ""' -s, --split-exp string print each result (or doc) into a file named (exp). [exp] argument must return a string. You can use $index in the expression as the result counter. --unwrapScalar unwrap scalar, print the value with no quotes, colors or comments (default true) -v, --verbose verbose mode -V, --version Print version information and quit --xml-attribute-prefix string prefix for xml attributes (default "+") --xml-content-name string name for xml content (if no attribute name is present). (default "+content") Use "yq [command] --help" for more information about a command.
yq
intenta preservar las posiciones de los comentarios y los espacios en blanco tanto como sea posible, pero no maneja todos los escenarios (consulte https://github.com/go-yaml/yaml/tree/v3 para obtener más detalles)
Powershell tiene sus propias... opiniones sobre citar a yq
"Sí", "No" se eliminaron como valores booleanos en el estándar yaml 1.2, que es el estándar que asume yq.
Vea consejos y trucos para problemas y soluciones más comunes.