a lightweight and portable command-line YAML, JSON, INI and XML processor. yq uses jq like syntax but works with yaml files as well as json, xml, ini, properties, csv and tsv. It doesn't yet support everything jq does - but it does support the most common operations and functions, and more is being added continuously.
yq is written in go - so you can download a dependency free binary for your platform and you are good to go! If you prefer there are a variety of package managers that can be used as well as Docker and Podman, all listed below.
Quick Usage Guide
Read a value:
yq'.a.b[0].c'file.yaml
Pipe from STDIN:
yq'.a.b[0].c'<file.yaml
Update a yaml file, in place
yq-i'.a.b[0].c = "cool"'file.yaml
Update using environment variables
NAME=mikeyq-i'.a.b[0].c = strenv(NAME)'file.yaml
Merge multiple files
# merge two filesyq-n'load("file1.yaml") * load("file2.yaml")'# merge using globs:# note the use of `ea` to evaluate all the files at once# instead of in sequenceyqea'. as $item ireduce ({}; . * $item )'path/to/*.yml
See the github page for the various ways you can install and use yq
Known Issues / Missing Features
yq attempts to preserve comment positions and whitespace as much as possible, but it does not handle all scenarios (see https://github.com/go-yaml/yaml/tree/v3 for details)