yq is a portable command-line YAML, JSON, XML, CSV, TOML and properties processor
Go to file
Piotr Komborski eb1acac350
Overwrite node if key exists
but value doesn't match or append if key does not exist

This fixes a bug with exploding anchors not overwriting nodes reported
in https://github.com/mikefarah/yq/issues/546

Test case:
```
a: &first_anchor
  foo: bar
  first: first
b: &second_anchor
  foo: bazz
  second: second
c:
  <<: *first_anchor
  <<: *second_anchor
```

Output:

```
a:
  foo: bar
  first: first
b:
  foo: bazz
  second: second
c:
  foo: bazz
  first: first
  second: second
```

foo is properly overwritten by *second_anchor
2020-09-30 14:37:54 +01:00
.github Use latest go-lang 2020-09-08 09:43:11 +10:00
cmd Overwrite node if key exists 2020-09-30 14:37:54 +01:00
debian Bump version to 3.3.2 2020-08-16 13:02:07 +10:00
docs Removed user docs 2020-01-30 10:32:34 +11:00
examples Can stripComments and explodeAnchors for compare 2020-06-11 09:13:55 +10:00
github-action added files for github action 2020-02-26 09:09:37 +11:00
pkg/yqlib Merge master fix 2020-09-13 10:59:40 +10:00
scripts Added checksum hashes order to release 2020-09-18 16:37:45 +10:00
snap Bumping minor version to indicate new merge features and slight backwards incompatibility 2020-09-13 11:06:56 +10:00
test splatting 2019-12-09 13:44:53 +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
compare.sh splatting 2019-12-09 13:44:53 +11:00
CONTRIBUTING.md Update CONTRIBUTING.md 2020-02-21 21:16:47 +11:00
Dockerfile Use latest go-lang 2020-09-08 09:43:11 +10:00
Dockerfile.dev Use latest go-lang 2020-09-08 09:43:11 +10:00
go.mod Use latest go-lang 2020-09-08 09:43:11 +10:00
go.sum Removed doctools 2020-09-08 13:03:18 +10: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 Updated install instructions, added wget 2020-09-21 11:06:57 +10:00
release_instructions.txt Bump debian package to version 3.1-2 2020-02-25 08:57:41 +11:00
yq_test.go splatting 2019-12-09 13:44:53 +11:00
yq.go Added exit flag 2020-06-10 16:55:20 +10:00

yq

Build Docker Pulls Github Releases (by Release) Go Report

a lightweight and portable command-line YAML processor

The aim of the project is to be the jq or sed of yaml files.

Install

Download the latest binary

MacOS:

brew install yq

Ubuntu and other Linux distros supporting snap packages:

snap install yq

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 r - a.path

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

sudo cat /etc/myfile | yq w - a.path value | sudo sponge /etc/myfile

or write to a temporary file:

sudo cat /etc/myfile | yq w - a.path value | sudo tee /etc/myfile.tmp
sudo mv /etc/myfile.tmp /etc/myfile
rm /etc/myfile.tmp

wget

Use wget to download the pre-compiled binaries:

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

For instance, VERSION=3.4.0 and BINARY=yq_linux_amd64

Run with Docker

Oneshot use:

docker run --rm -v "${PWD}":/workdir mikefarah/yq yq [flags] <command> 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 yq "$@"
}

Go Get:

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

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)

Alpine Linux

  • Enable community repo by adding $MIRROR/alpine/v$VERSION/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:
  compare          yq x [--prettyPrint/-P] dataA.yaml dataB.yaml 'b.e(name==fr*).value'
  delete           yq d [--inplace/-i] [--doc/-d index] sample.yaml 'b.e(name==fred)'
  help             Help about any command
  merge            yq m [--inplace/-i] [--doc/-d index] [--overwrite/-x] [--append/-a] sample.yaml sample2.yaml
  new              yq n [--script/-s script_file] a.b.c newValue
  prefix           yq p [--inplace/-i] [--doc/-d index] sample.yaml a.b.c
  read             yq r [--printMode/-p pv] sample.yaml 'b.e(name==fr*).value'
  shell-completion Generates shell completion scripts
  validate         yq v sample.yaml
  write            yq w [--inplace/-i] [--script/-s script_file] [--doc/-d index] sample.yaml 'b.e(name==fr*).value' newValue

Flags:
  -C, --colors        print with colors
  -h, --help          help for yq
  -I, --indent int    sets indent level for output (default 2)
  -P, --prettyPrint   pretty print
  -j, --tojson        output as json. By default it prints a json document in one line, use the prettyPrint flag to print a formatted doc.
  -v, --verbose       verbose mode
  -V, --version       Print version information and quit

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

Upgrade from V2

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

Known Issues / Missing Features