yq/README.md

200 lines
7.1 KiB
Markdown
Raw Normal View History

2019-05-14 17:28:06 +00:00
# yq
2018-07-31 09:04:34 +00:00
2020-02-26 10:14:15 +00:00
![Build](https://github.com/mikefarah/yq/workflows/Build/badge.svg) ![Docker Pulls](https://img.shields.io/docker/pulls/mikefarah/yq.svg) ![Github Releases (by Release)](https://img.shields.io/github/downloads/mikefarah/yq/total.svg) ![Go Report](https://goreportcard.com/badge/github.com/mikefarah/yq)
2018-07-10 11:46:36 +00:00
2020-12-30 22:22:22 +00:00
a lightweight and portable command-line YAML processor. `yq` uses [jq](https://github.com/stedolan/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.
2015-09-27 03:29:20 +00:00
2020-12-30 22:22:22 +00:00
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.
2015-09-27 03:29:20 +00:00
2020-12-20 02:34:58 +00:00
## 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](https://mikefarah.gitbook.io/yq/v/v4.x/upgrading-from-v3).
2021-01-06 04:33:20 +00:00
Support for v3 will cease August 2021, until then, critical bug and security fixes will still get applied if required.
2015-11-20 10:42:45 +00:00
## Install
2020-01-11 00:44:02 +00:00
2020-02-21 10:07:37 +00:00
### [Download the latest binary](https://github.com/mikefarah/yq/releases/latest)
2020-01-30 23:37:27 +00:00
2020-12-30 22:22:18 +00:00
### wget
Use wget to download the pre-compiled binaries:
2020-12-30 22:33:15 +00:00
#### Compressed via tar.gz
2020-12-30 22:30:59 +00:00
```bash
wget https://github.com/mikefarah/yq/releases/download/${VERSION}/${BINARY}.tar.gz -O - |\
tar xz && mv ${BINARY} /usr/bin/yq
```
2020-12-30 22:33:15 +00:00
#### Plain binary
2020-12-30 22:30:59 +00:00
2020-12-30 22:22:18 +00:00
```bash
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](https://brew.sh/)
2017-12-24 19:30:49 +00:00
```
brew install yq
```
2020-04-22 13:29:44 +00:00
2021-01-06 04:33:20 +00:00
or, for the (deprecated) v3 version:
2021-01-06 04:22:29 +00:00
```
brew install yq@3
```
Note that for v3, as it is a versioned brew it will not add the `yq` command to your path automatically. Please follow the instructions given by brew upon installation.
2020-12-30 22:22:18 +00:00
### Linux via snap:
```
snap install yq
```
2021-01-06 04:33:20 +00:00
or, for the (deprecated) v3 version:
2021-01-05 02:03:36 +00:00
```
snap install yq --channel=v3/stable
```
#### Snap notes
2020-05-23 14:30:00 +00:00
`yq` installs with [_strict confinement_](https://docs.snapcraft.io/snap-confinement/6233) 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](https://linux.die.net/man/1/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:
```bash
docker run --rm -v "${PWD}":/workdir mikefarah/yq <command> [flags] [expression ]FILE...
```
#### Run commands interactively:
```bash
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:
```bash
yq() {
docker run --rm -i -v "${PWD}":/workdir mikefarah/yq "$@"
}
```
### Go Get:
```
2020-12-25 01:46:08 +00:00
GO111MODULE=on go get github.com/mikefarah/yq
```
## Community Supported Installation methods
As these are supported by the community :heart: - 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](https://www.macports.org/)
```
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:
```sh
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)
2015-10-13 10:31:02 +00:00
## Features
- Written in portable go, so you can download a lovely dependency free binary
- Uses similar syntax as `jq` but works with YAML and JSON files
- Fully supports multi document yaml files
- Colorized yaml output
- [Deeply traverse yaml](https://mikefarah.gitbook.io/yq/v/v4.x/traverse)
- [Sort yaml by keys](https://mikefarah.gitbook.io/yq/v/v4.x/sort-keys)
2020-12-22 23:37:51 +00:00
- Manipulate yaml [comments](https://mikefarah.gitbook.io/yq/comment-operators), [styling](https://mikefarah.gitbook.io/yq/style), [tags](https://mikefarah.gitbook.io/yq/tag) and [anchors and aliases](https://mikefarah.gitbook.io/yq/anchor-and-alias-operators).
- [Update yaml inplace](https://mikefarah.gitbook.io/yq/v/v4.x/commands/evaluate#flags)
- [Complex expressions to select and update](https://mikefarah.gitbook.io/yq/v/v4.x/select#select-and-update-matching-values-in-map)
- Keeps yaml formatting and comments when updating (though there are issues with whitespace)
- [Convert to/from json to yaml](https://mikefarah.gitbook.io/yq/v/v4.x/usage/convert)
- [Pipe data in by using '-'](https://mikefarah.gitbook.io/yq/v/v4.x/commands/evaluate)
2020-12-20 02:34:58 +00:00
- [General shell completion scripts (bash/zsh/fish/powershell)](https://mikefarah.gitbook.io/yq/v/v4.x/commands/shell-completion)
2015-09-29 00:20:31 +00:00
2020-01-29 22:58:21 +00:00
## [Usage](https://mikefarah.gitbook.io/yq/)
2017-04-13 05:44:31 +00:00
2020-01-29 22:58:21 +00:00
Check out the [documentation](https://mikefarah.gitbook.io/yq/) for more detailed and advanced usage.
2017-04-13 05:44:31 +00:00
2015-09-27 03:29:20 +00:00
```
2017-04-14 02:40:03 +00:00
Usage:
2017-12-17 22:11:08 +00:00
yq [flags]
yq [command]
2015-09-27 03:40:09 +00:00
2017-04-14 02:40:03 +00:00
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
2020-06-11 23:30:05 +00:00
help Help about any command
shell-completion Generate completion script
2015-10-05 03:41:01 +00:00
2017-04-14 02:40:03 +00:00
Flags:
-C, --colors force print with colors
-e, --exit-status set exit status if there are no matches or null or false is returned
2020-02-03 05:37:53 +00:00
-h, --help help for yq
2020-02-07 00:26:29 +00:00
-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.
2020-12-28 00:57:20 +00:00
-P, --prettyPrint pretty print, shorthand for '... style = ""'
-j, --tojson output as json. Set indent to 0 to print json in one line.
2020-02-03 05:37:53 +00:00
-v, --verbose verbose mode
-V, --version Print version information and quit
2015-10-05 23:01:33 +00:00
2017-12-17 22:11:08 +00:00
Use "yq [command] --help" for more information about a command.
2015-09-29 06:29:32 +00:00
```
2020-09-03 00:58:00 +00:00
Simple Example:
```bash
yq e '.a.b | length' f1.yml f2.yml
```
2020-09-16 05:42:09 +00:00
## Known Issues / Missing Features
2020-09-03 00:58:00 +00:00
- `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)