yq is a portable command-line YAML, JSON, XML, CSV, TOML and properties processor
Go to file
2021-02-11 10:58:40 +11:00
.github update issue template, instruct questions to be raised in disussion 2021-02-11 10:58:40 +11:00
cmd Fixed updating yaml from other files 2021-02-11 10:58:40 +11:00
debian Bump version to 3.3.2 2020-08-16 13:02:07 +10:00
examples merge anchors! 2020-10-30 12:00:48 +11:00
github-action Fixed updating yaml from other files 2021-02-11 10:58:40 +11:00
pkg/yqlib Unwrap node in get tag to return proper tag at root level 2021-02-11 10:58:40 +11:00
scripts scripts/check works for local and docker build 2020-12-30 10:40:41 +11:00
snap Fixed updating yaml from other files 2021-02-11 10:58:40 +11:00
test JQ like syntax wip 2020-10-16 12:29:26 +11:00
.dockerignore Added formatter, fixed docker build 2019-10-31 08:21:19 +11:00
.gitignore more tests, some refactoring 2020-01-09 08:17:56 +11:00
action.yml Fixing github action description 2020-03-02 08:47:19 +11:00
CODE_OF_CONDUCT.md Create CODE_OF_CONDUCT.md 2020-02-21 21:13:14 +11:00
CONTRIBUTING.md Update CONTRIBUTING.md 2020-02-21 21:16:47 +11:00
Dockerfile Added trivy to docker build, bumped alpine image 2020-12-21 15:48:25 +11:00
Dockerfile.dev find golangci_lint through PATH 2020-12-30 10:30:53 +11:00
go.mod Added pipe and length docs, fix pipe precedence 2020-12-01 17:58:07 +11:00
go.sum Merge branch 'v4' 2020-12-20 13:31:23 +11:00
LICENSE Added License (MIT) 2017-02-10 16:00:25 +11:00
Makefile update ci to use go 1.13, switch to golangci-lint 2019-10-31 08:21:19 +11:00
Makefile.variables Rename to yq 2017-12-18 15:29:41 +11:00
mkdocs.yml Removed user docs 2020-01-30 10:32:34 +11:00
README.md Added v3 snap instructions 2021-02-11 10:58:40 +11:00
release_instructions.txt updated release instructions 2020-12-29 09:59:16 +11:00
yq.go first cli 2020-10-27 16:45:16 +11:00

yq

Build Docker Pulls Github Releases (by Release) Go Report

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.

V4 released!

V4 is now officially released, it's quite different from V3 (sorry for the migration), however it is much more similar to jq, using a similar expression syntax and therefore support much more complex functionality!

If you've been using v3 and want/need to upgrade, checkout the upgrade guide.

Install

Download the latest binary

wget

Use wget to download the pre-compiled binaries:

Compressed via tar.gz

wget https://github.com/mikefarah/yq/releases/download/${VERSION}/${BINARY}.tar.gz -O - |\
  tar xz && mv ${BINARY} /usr/bin/yq

Plain binary

wget https://github.com/mikefarah/yq/releases/download/${VERSION}/${BINARY} -O /usr/bin/yq &&\
    chmod +x /usr/bin/yq

For instance, VERSION=v4.2.0 and BINARY=yq_linux_amd64

MacOS / Linux via Homebrew:

Using Homebrew

brew install yq

Linux via snap:

snap install yq

or, for the v3 version:

snap install yq --channel=v3/stable

Snap notes

yq installs with strict confinement in snap, this means it doesn't have direct access to root files. To read root files you can:

sudo cat /etc/myfile | yq e '.a.path' - 

And to write to a root file you can either use sponge:

sudo cat /etc/myfile | yq e '.a.path = "value"' - | sudo sponge /etc/myfile

or write to a temporary file:

sudo cat /etc/myfile | yq e '.a.path = "value"' | sudo tee /etc/myfile.tmp
sudo mv /etc/myfile.tmp /etc/myfile
rm /etc/myfile.tmp

Run with Docker

Oneshot use:

docker run --rm -v "${PWD}":/workdir mikefarah/yq <command> [flags] [expression ]FILE...

Run commands interactively:

docker run --rm -it -v "${PWD}":/workdir mikefarah/yq sh

It can be useful to have a bash function to avoid typing the whole docker command:

yq() {
  docker run --rm -i -v "${PWD}":/workdir mikefarah/yq "$@"
}

Go Get:

GO111MODULE=on go get github.com/mikefarah/yq

Community Supported Installation methods

As these are supported by the community ❤️ - however, they may be out of date with the officially supported releases.

Windows:

choco install yq

Supported by @chillum (https://chocolatey.org/packages/yq)

Mac:

Using MacPorts

sudo port selfupdate
sudo port install yq

Supported by @herbygillot (https://ports.macports.org/maintainer/github/herbygillot)

Alpine Linux

  • Enable edge/community repo by adding $MIRROR/alpine/edge/community to /etc/apk/repositories
  • Update database index with apk update
  • Install yq with apk add yq

Supported by Tuan Hoang https://pkgs.alpinelinux.org/package/edge/community/x86/yq

On Ubuntu 16.04 or higher from Debian package:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys CC86BB64
sudo add-apt-repository ppa:rmescandon/yq
sudo apt update
sudo apt install yq -y

Supported by @rmescandon (https://launchpad.net/~rmescandon/+archive/ubuntu/yq)

Features

Usage

Check out the documentation for more detailed and advanced usage.

Usage:
  yq [flags]
  yq [command]

Available Commands:
  eval             Apply expression to each document in each yaml file given in sequence
  eval-all         Loads _all_ yaml documents of _all_ yaml files and runs expression once
  help             Help about any command
  shell-completion Generate completion script

Flags:
  -C, --colors        force print with colors
  -e, --exit-status   set exit status if there are no matches or null or false is returned
  -h, --help          help for yq
  -I, --indent int    sets indent level for output (default 2)
  -i, --inplace       update the yaml file inplace of first yaml file given.
  -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 yaml docs from scratch.
  -P, --prettyPrint    pretty print, shorthand for '... style = ""' 
  -j, --tojson        output as json. Set indent to 0 to print json in one line.
  -v, --verbose       verbose mode
  -V, --version       Print version information and quit

Use "yq [command] --help" for more information about a command.

Simple Example:

yq e '.a.b | length' f1.yml f2.yml 

Known Issues / Missing Features