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.
Read a value:
yq e '.a.b[0].c' file.yaml
Pipe from STDIN:
cat file.yaml | yq e '.a.b[0].c' -
Update a yaml file, inplace
yq e -i '.a.b[0].c = "cool"' file.yaml
Update using environment variables
NAME=mike yq e -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 e -i '
.a.b[0].c = "cool" |
.x.y.z = "foobar" |
.person.name = strenv(NAME)
' file.yaml
See the documentation for more.
Use wget to download the pre-compiled binaries:
wget https://github.com/mikefarah/yq/releases/download/${VERSION}/${BINARY}.tar.gz -O - |\
tar xz && mv ${BINARY} /usr/bin/yq
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
Using Homebrew
brew install yq
or, for the (deprecated) v3 version:
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.
snap install yq
or, for the (deprecated) v3 version:
snap install yq --channel=v3/stable
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
docker run --rm -v "${PWD}":/workdir mikefarah/yq <command> [flags] [expression ]FILE...
You'll need to pass the -i\--interactive
flag to docker:
cat myfile.yml | docker run -i --rm mikefarah/yq e . -
docker run --rm -it -v "${PWD}":/workdir --entrypoint sh mikefarah/yq
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
's docker image no longer runs under root (https://github.com/mikefarah/yq/pull/860). If you'd like to install more things in the docker image, or you're having permissions issues when attempting to read/write files you'll need to either:
docker run --user="root" -it --entrypoint sh mikefarah/yq
Or, in your docker file:
FROM mikefarah/yq
USER root
RUN apk add bash
USER yq
- name: Set foobar to cool
uses: mikefarah/yq@master
with:
cmd: yq eval -i '.foo.bar = "cool"' 'config.yml'
See https://mikefarah.gitbook.io/yq/usage/github-action for more.
GO111MODULE=on go get github.com/mikefarah/yq/v4
As these are supported by the community
webi yq
See webiSupported by @adithyasunil26 (https://github.com/webinstall/webi-installers/tree/master/yq)
choco install yq
Supported by @chillum (https://chocolatey.org/packages/yq)
Using MacPorts
sudo port selfupdate
sudo port install yq
Supported by @herbygillot (https://ports.macports.org/maintainer/github/herbygillot)
$MIRROR/alpine/edge/community
to /etc/apk/repositories
apk update
apk add yq
Supported by Tuan Hoanghttps://pkgs.alpinelinux.org/package/edge/community/x86/yq
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)
jq
but works with YAML and JSON filesCheck out the documentation for more detailed and advanced usage.
Usage:
yq [flags]
yq [command]
Available Commands:
eval Apply the expression to each document in each yaml file 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
-f, --front-matter string (extract|process) first input as yaml front-matter. Extract will pull out the yaml content, process will run the expression against the yaml content, leaving the remaining data intact
-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.
--unwrapScalar unwrap scalar, print the value with no quotes, colors or comments (default true)
-v, --verbose verbose mode
-V, --version Print version information and quit
Use "yq [command] --help" for more information about a command.
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)See tips and tricks for more common problems and solutions.
yq使用示例 yq 是一个轻量级且便携的命令行 YAML、JSON 和 XML 处理器。它使用类似于 jq 的语法,但可以处理 yaml 文件以及 json、xml、properties、csv 和 tsv。它尚未支持 jq 的所有功能,但它支持最常用的操作和函数,并且不断添加更多功能。¹ 下面是一些 yq 的使用示例: 读取值:yq '.a.b [0].c' file.yaml 从 STDIN
yq一个轻量级和便携式命令行YAML处理器,yq是用go编写的,所以它是一个无依赖性的二进制文件,可以直接运行在CentOS等其他发行版的Linux上 如果需要使用shell脚本去读取或修改某个yaml的键值,那么使用yq很方便的达到目的,下面将演示如果在命令行下使用yq进行读取或修改yaml文件的键值 下载地址 GitHub - mikefarah
yq yq is a lightweight and portable command-line YAML processor. https://mikefarah.gitbook.io/yq/
sudo wget -O /usr/local/bin/yq https://github.com/mikefarah/yq/releases/download/3.3.0/yq_linux_amd64 sudo chmod +x /usr/local/bin/yq
wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -O /usr/bin/yq && chmod +x /usr/bin/yq && yq --version yum install moreutils -y #文件合并 yq eval-all 'select(fileIndex == 0)
YQ YQServer YQServer\.classpath YQServer\.project YQServer\.settings YQServer\.settings\org.eclipse.jdt.core.prefs YQServer\bin YQServer\bin\org YQServer\bin\org\yhn YQServer\bin\org\yhn\yq YQServer\b