ein leichter und portabler Befehlszeilen-YAML-, JSON- und XML-Prozessor. yq
verwendet eine JQ-ähnliche Syntax, funktioniert jedoch mit Yaml-Dateien sowie JSON, XML, Properties, CSV und TSV. Es unterstützt noch nicht alles, was jq
kann – aber es unterstützt die gängigsten Operationen und Funktionen, und es werden kontinuierlich weitere hinzugefügt.
yq ist in go geschrieben – Sie können also eine abhängigkeitsfreie Binärdatei für Ihre Plattform herunterladen und loslegen! Wenn Sie möchten, können Sie neben Docker und Podman auch verschiedene Paketmanager verwenden, die alle unten aufgeführt sind.
Lesen Sie einen Wert:
yq '.ab[0].c' Datei.yaml
Rohr von STDIN:
yq '.ab[0].c' < file.yaml
Aktualisieren Sie eine Yaml-Datei direkt
yq -i '.ab[0].c = "cool"' file.yaml
Aktualisieren Sie mithilfe von Umgebungsvariablen
NAME=mike yq -i '.ab[0].c = strenv(NAME)' file.yaml
Mehrere Dateien zusammenführen
# zwei Dateien zusammenführenyq -n 'load("file1.yaml") * load("file2.yaml")'# mit Globs zusammenführen:# Beachten Sie die Verwendung von „ea“, um alle Dateien auf einmal auszuwerten# statt nacheinanderyq ea '. as $item ireduce ({}; . * $item )' path/to/*.yml
Mehrere Aktualisierungen einer Yaml-Datei
yq -i ' .ab[0].c = "cool" | .xyz = "foobar" | .person.name = strenv(NAME)' file.yaml
Suchen und aktualisieren Sie ein Element in einem Array:
yq '(.[] | select(.name == "foo") | .address) = "12 cat st"'
Konvertieren Sie JSON in YAML
yq -Poy sample.json
Weitere Beispiele finden Sie in den Rezepten und weitere Informationen in der Dokumentation.
Werfen Sie einen Blick auf die Diskussionen mit häufig gestellten Fragen und coolen Ideen
Verwenden Sie wget, um gzip-komprimierte vorkompilierte Binärdateien herunterzuladen:
Zum Beispiel VERSION=v4.2.0 und BINARY=yq_linux_amd64
wget https://github.com/mikefarah/yq/releases/download/${VERSION}/${BINARY}.tar.gz -O - | tar xz && mv ${BINARY} /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
Homebrew verwenden
brew install yq
snap install yq
yq
wird mit strikter Beschränkung in Snap installiert, was bedeutet, dass es keinen direkten Zugriff auf Root-Dateien hat. Um Stammdateien zu lesen, können Sie:
sudo cat /etc/myfile | yq '.a.path'
Und um in eine Root-Datei zu schreiben, können Sie entweder Sponge verwenden:
sudo cat /etc/myfile | yq '.a.path = "value"' | sudo sponge /etc/myfile
oder in eine temporäre Datei schreiben:
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 [Befehl] [Flags] [Ausdruck]DATEI...
Beachten Sie, dass Sie yq
in Docker ohne Netzwerkzugriff und andere Privilegien ausführen können, wenn Sie dies wünschen, nämlich --security-opt=no-new-privileges --cap-drop all --network none
.
podman run --rm -v "${PWD}":/workdir mikefarah/yq [Befehl] [Flags] [Ausdruck]DATEI...
Sie müssen das Flag -i--interactive
an Docker übergeben:
docker run -i --rm mikefarah/yq '.this.thing' < myfile.yml
podman run -i --rm mikefarah/yq '.this.thing' < myfile.yml
docker run --rm -it -v "${PWD}":/workdir --entrypoint sh mikefarah/yq
podman run --rm -it -v "${PWD}":/workdir --entrypoint sh mikefarah/yq
Es kann nützlich sein, eine Bash-Funktion zu haben, um die Eingabe des gesamten Docker-Befehls zu vermeiden:
yq() { docker run --rm -i -v "${PWD}":/workdir mikefarah/yq "$@"}
yq() { podman run --rm -i -v "${PWD}":/workdir mikefarah/yq "$@"}
Das Container-Image von yq
läuft nicht mehr unter Root (#860). Wenn Sie weitere Dinge im Container-Image installieren möchten oder beim Versuch, Dateien zu lesen/schreiben, Probleme mit den Berechtigungen haben, müssen Sie entweder:
docker run --user="root" -it --entrypoint sh mikefarah/yq
podman run --user="root" -it --entrypoint sh mikefarah/yq
Oder in Ihrer Docker-Datei:
FROM mikefarah/yq USER root RUN apk add --no-cache bash USER yq
Standardmäßig enthält das von yq verwendete Alpenbild keine Zeitzonendaten. Wenn Sie den tz
-Operator verwenden möchten, müssen Sie diese Daten angeben:
FROM mikefarah/yq USER root RUN apk add --no-cache tzdata USER yq
Wenn Sie podman mit SELinux verwenden, müssen Sie das Shared-Volume-Flag :z
auf dem Volume-Mount setzen:
-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 }}
Weitere Informationen finden Sie unter https://mikefarah.gitbook.io/yq/usage/github-action.
go install github.com/mikefarah/yq/v4@latest
Da diese von der Community unterstützt werden ❤️ – können sie jedoch mit den offiziell unterstützten Versionen veraltet sein.
Bitte beachten Sie, dass das Debian-Paket (zuvor von @rmescandon unterstützt) nicht mehr gepflegt wird. Bitte verwenden Sie eine alternative Installationsmethode.
Kasse yq
auf x-cmd: https://x-cmd.com/mod/yq
Sofortige Ergebnisse: Sehen Sie sich die Ausgabe Ihres YQ-Filters in Echtzeit an.
Fehlerbehandlung: Ist ein Syntaxfehler aufgetreten? Es werden die Fehlermeldung und die Ergebnisse des nächstgelegenen gültigen Filters angezeigt
Danke @edwinjhlee!
nix profile install nixpkgs#yq-go
Siehe hier
webi yq
Siehe webi Unterstützt von @adithyasunil26 (https://github.com/webinstall/webi-installers/tree/master/yq)
pacman -S go-yq
Schokolade verwenden
choco install yq
Unterstützt von @chillum (https://chocolatey.org/packages/yq)
Mit Schaufel
scoop install main/yq
Winget verwenden
winget install --id MikeFarah.yq
Verwenden von MacPorts
sudo port selfupdate sudo port install yq
Unterstützt von @herbygillot (https://ports.macports.org/maintainer/github/herbygillot)
Alpine Linux v3.20+ (und Edge):
apk add yq-go
Alpine Linux bis v3.19:
apk add yq
Unterstützt von Tuan Hoang (https://pkgs.alpinelinux.org/packages?name=yq-go)
Flox kann zur Installation von yq unter Linux, MacOS und Windows über WSL verwendet werden.
flox install yq
Ausführliche Dokumentation mit vielen Beispielen
In Portable Go geschrieben, so dass Sie eine schöne, abhängigkeitsfreie Binärdatei herunterladen können
Verwendet eine ähnliche Syntax wie jq
, funktioniert aber mit YAML-, JSON- und XML-Dateien
Unterstützt vollständig Yaml-Dateien mit mehreren Dokumenten
Unterstützt Yaml-Frontmaterie-Blöcke (z. B. Jekyll/Assemble)
Kolorierte Yaml-Ausgabe
Datums-/Uhrzeitmanipulation und Formatierung mit TZ
Tiefgreifende Datenstrukturen
Sortierschlüssel
Manipulieren Sie Yaml-Kommentare, Stile, Tags, Anker und Aliase.
Update vorhanden
Komplexe Ausdrücke zum Auswählen und Aktualisieren
Behält die Yaml-Formatierung und Kommentare beim Aktualisieren bei (obwohl es Probleme mit Leerzeichen gibt)
Base64-Daten dekodieren/kodieren
Laden Sie Inhalte aus anderen Dateien
Konvertieren nach/von json/ndjson
Konvertieren in/von XML
Konvertieren in/von Eigenschaften
Konvertieren in/von csv/tsv
Allgemeine Shell-Vervollständigungsskripte (bash/zsh/fish/powershell)
Reduzieren Sie, um mehrere Dateien zusammenzuführen oder ein Array oder andere ausgefallene Dinge zu summieren.
Github-Aktion zur Verwendung in Ihrer automatisierten Pipeline (danke @devorbitus)
Schauen Sie sich die Dokumentation für eine detailliertere und erweiterte Nutzung an.
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
versucht, Kommentarpositionen und Leerzeichen so weit wie möglich beizubehalten, behandelt jedoch nicht alle Szenarios (Einzelheiten finden Sie unter https://github.com/go-yaml/yaml/tree/v3).
Powershell hat seine eigenen ... Meinungen zum Zitieren von yq
„yes“, „no“ wurden als boolesche Werte im Yaml 1.2-Standard weggelassen – was der Standard ist, den yq annimmt.
Weitere häufig auftretende Probleme und Lösungen finden Sie in den Tipps und Tricks.