yq is a portable command-line YAML, JSON, XML, CSV, TOML and properties processor
Go to file
2023-01-10 13:53:54 +11:00
.gitbook/assets GitBook: [#206] deep update example 2021-10-30 03:14:39 +00:00
commands Fixed doc typos (#1457) 2022-12-05 16:49:31 +11:00
operators v4.30.6 2022-12-17 11:16:27 +11:00
usage added update multiple files tips 2023-01-10 13:53:54 +11:00
how-it-works.md Bumping version 2022-09-09 11:23:34 +10:00
README.md Add link to discussions on readme 2022-08-01 16:56:21 +10:00
SUMMARY.md v4.30.1 2022-11-11 14:58:39 +11:00
upgrading-from-v3.md Fixed doc typos (#1457) 2022-12-05 16:49:31 +11:00

yq

a lightweight and portable command-line YAML processor. yq uses jq like syntax but works with yaml files as well as json. 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, all listed below.

Notice for v4.x versions prior to 4.18.1

Since 4.18.1, yq's 'eval/e' command is the default command and no longers needs to be specified.

Older versions will still need to specify 'eval/e'.

Similarly, '-' is no longer required as a filename to read from STDIN (unless reading from multiple files).

TLDR:

Prior to 4.18.1

cat file.yaml | yq e '.cool' -

4.18+

cat file.yaml | yq '.cool'

When merging multiple files together, eval-all/ea is still required to tell yq to run the expression again all the document at once.

Quick Usage Guide

Read a value:

yq '.a.b[0].c' file.yaml

Pipe from STDIN:

cat file.yaml | yq '.a.b[0].c'

Update a yaml file, inplace

yq -i '.a.b[0].c = "cool"' file.yaml

Update using environment variables

NAME=mike yq -i '.a.b[0].c = strenv(NAME)' file.yaml

Merge multiple files

yq ea '. as $item ireduce ({}; . * $item )' path/to/*.yml

Multiple updates to a yaml file

yq -i '
  .a.b[0].c = "cool" |
  .x.y.z = "foobar" |
  .person.name = strenv(NAME)
' file.yaml

Take a look at the discussions for common questions, and cool ideas

Install

See the github page for the various ways you can install and use yq

Known Issues / Missing Features

See tips and tricks for more common problems and solutions.