un processeur YAML, JSON et XML en ligne de commande léger et portable. yq
utilise la syntaxe de type jq mais fonctionne avec les fichiers yaml ainsi que json, xml, propriétés, csv et tsv. Il ne prend pas encore en charge tout ce que jq
fait - mais il prend en charge les opérations et fonctions les plus courantes, et d'autres sont ajoutées continuellement.
yq est écrit en go - vous pouvez donc télécharger un binaire sans dépendance pour votre plate-forme et vous êtes prêt à partir ! Si vous préférez, il existe une variété de gestionnaires de packages qui peuvent être utilisés ainsi que Docker et Podman, tous répertoriés ci-dessous.
Lire une valeur :
yq '.ab[0].c' fichier.yaml
Tuyau de STDIN :
yq '.ab[0].c' < fichier.yaml
Mettre à jour un fichier yaml, sur place
yq -i '.ab[0].c = "cool"' fichier.yaml
Mettre à jour à l'aide de variables d'environnement
NOM=mike yq -i '.ab[0].c = strenv(NOM)' fichier.yaml
Fusionner plusieurs fichiers
# fusionner deux fichiersyq -n 'load("file1.yaml") * load("file2.yaml")'# fusionner en utilisant des globs :# notez l'utilisation de `ea` pour évaluer tous les fichiers en même temps# au lieu de dans séquenceyq ea'. comme $item ireduce ({}; . * $item )' chemin/vers/*.yml
Plusieurs mises à jour d'un fichier yaml
yq -i ' .ab[0].c = "cool" | .xyz = "foobar" | .person.name = strenv(NOM)' fichier.yaml
Recherchez et mettez à jour un élément dans un tableau :
yq '(.[] | select(.name == "foo") | .address) = "12 cat st"'
Convertir JSON en YAML
yq -Poy exemple.json
Voir les recettes pour plus d'exemples et la documentation pour plus d'informations.
Jetez un œil aux discussions pour des questions courantes et des idées intéressantes
Utilisez wget pour télécharger des binaires précompilés gzippés :
Par exemple, VERSION=v4.2.0 et BINARY=yq_linux_amd64
wget https://github.com/mikefarah/yq/releases/download/${VERSION}/${BINARY}.tar.gz -O - | tar xz && mv ${BINAIRE} /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
Utiliser Homebrew
brew install yq
snap install yq
yq
s'installe avec un confinement strict en un clin d'œil, cela signifie qu'il n'a pas d'accès direct aux fichiers racine. Pour lire les fichiers racine, vous pouvez :
sudo cat /etc/myfile | yq '.a.path'
Et pour écrire dans un fichier racine, vous pouvez soit utiliser l'éponge :
sudo cat /etc/myfile | yq '.a.path = "value"' | sudo sponge /etc/myfile
ou écrivez dans un fichier temporaire :
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 [commande] [drapeaux] [expression] FILE...
Notez que vous pouvez exécuter yq
dans Docker sans accès au réseau ni autres privilèges si vous le souhaitez, à savoir --security-opt=no-new-privileges --cap-drop all --network none
.
podman run --rm -v "${PWD}":/workdir mikefarah/yq [commande] [drapeaux] [expression ]FILE...
Vous devrez transmettre l'indicateur -i--interactive
au docker :
docker run -i --rm mikefarah/yq '.this.thing' < monfichier.yml
podman run -i --rm mikefarah/yq '.this.thing' < monfichier.yml
docker run --rm -it -v "${PWD}":/workdir --entrypoint sh mikefarah/yq
podman run --rm -it -v "${PWD}":/workdir --entrypoint sh mikefarah/yq
Il peut être utile d'avoir une fonction bash pour éviter de taper la commande docker en entier :
yq() { docker run --rm -i -v "${PWD}":/workdir mikefarah/yq "$@"}
yq() { podman run --rm -i -v "${PWD}":/workdir mikefarah/yq "$@"}
L'image du conteneur de yq
ne s'exécute plus sous root (#860). Si vous souhaitez installer plus d'éléments dans l'image du conteneur ou si vous rencontrez des problèmes d'autorisations lorsque vous tentez de lire/écrire des fichiers, vous devrez soit :
docker run --user="root" -it --entrypoint sh mikefarah/yq
podman run --user="root" -it --entrypoint sh mikefarah/yq
Ou, dans votre Dockerfile :
FROM mikefarah/yq USER root RUN apk add --no-cache bash USER yq
Par défaut, l'image alpine utilisée par yq n'inclut pas les données de fuseau horaire. Si vous souhaitez utiliser l'opérateur tz
, vous devrez inclure ces données :
FROM mikefarah/yq USER root RUN apk add --no-cache tzdata USER yq
Si vous utilisez podman avec SELinux, vous devrez définir l'indicateur de volume partagé :z
sur le montage du volume :
-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 }}
Voir https://mikefarah.gitbook.io/yq/usage/github-action pour en savoir plus.
go install github.com/mikefarah/yq/v4@latest
Comme ceux-ci sont pris en charge par la communauté ❤️ - cependant, ils peuvent être obsolètes par rapport aux versions officiellement prises en charge.
Veuillez noter que le package Debian (précédemment supporté par @rmescandon) n'est plus maintenu. Veuillez utiliser une autre méthode d'installation.
Commander yq
sur x-cmd : https://x-cmd.com/mod/yq
Résultats instantanés : consultez le résultat de votre filtre yq en temps réel.
Gestion des erreurs : vous rencontrez une erreur de syntaxe ? Il affichera le message d'erreur et les résultats du filtre valide le plus proche
Merci @edwinjhlee !
nix profile install nixpkgs#yq-go
Voir ici
webi yq
Voir webi pris en charge par @adithyasunil26 (https://github.com/webinstall/webi-installers/tree/master/yq)
pacman -S go-yq
Utiliser du chocolat
choco install yq
Soutenu par @chillum (https://chocolatey.org/packages/yq)
Utiliser une cuillère
scoop install main/yq
Utiliser Winget
winget install --id MikeFarah.yq
Utiliser MacPort
sudo port selfupdate sudo port install yq
Soutenu par @herbygillot (https://ports.macports.org/maintainer/github/herbygillot)
Alpine Linux v3.20+ (et Edge) :
apk add yq-go
Alpine Linux jusqu'à la v3.19 :
apk add yq
Pris en charge par Tuan Hoang (https://pkgs.alpinelinux.org/packages?name=yq-go)
Flox peut être utilisé pour installer yq sur Linux, MacOS et Windows via WSL.
flox install yq
Documentation détaillée avec de nombreux exemples
Écrit en portable Go, vous pouvez donc télécharger un joli binaire gratuit et sans dépendances
Utilise une syntaxe similaire à celle jq
mais fonctionne avec les fichiers YAML, JSON et XML
Prend entièrement en charge les fichiers yaml multi-documents
Prend en charge les blocs de présentation yaml (par exemple, jekyll/assemble)
Sortie yaml colorisée
Manipulation et formatage de la date/heure avec TZ
Structures de données profondément
Trier les clés
Manipulez les commentaires Yaml, le style, les balises, les ancres et les alias.
Mise à jour en place
Expressions complexes à sélectionner et à mettre à jour
Conserve le formatage yaml et les commentaires lors de la mise à jour (bien qu'il y ait des problèmes avec les espaces)
Décoder/Encoder des données base64
Charger le contenu d'autres fichiers
Convertir vers/depuis json/ndjson
Convertir vers/depuis XML
Convertir vers/depuis les propriétés
Convertir vers/depuis csv/tsv
Scripts généraux de complétion du shell (bash/zsh/fish/powershell)
Réduisez pour fusionner plusieurs fichiers ou additionner un tableau ou d’autres choses sophistiquées.
Action Github à utiliser dans votre pipeline automatisé (merci @devorbitus)
Consultez la documentation pour une utilisation plus détaillée et avancée.
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
tente de préserver autant que possible les positions des commentaires et les espaces, mais il ne gère pas tous les scénarios (voir https://github.com/go-yaml/yaml/tree/v3 pour plus de détails)
Powershell a ses propres... opinions sur la citation de yq
"oui", "non" ont été supprimés en tant que valeurs booléennes dans la norme yaml 1.2 - ce qui est la norme que suppose yq.
Consultez les trucs et astuces pour connaître les problèmes et les solutions les plus courants.