軽量でポータブルなコマンドライン YAML、JSON、および XML プロセッサ。 yq
jq のような構文を使用しますが、yaml ファイルだけでなく、json、xml、プロパティ、csv、tsv も処理します。まだjq
行うすべてをサポートしているわけではありませんが、最も一般的な操作と関数はサポートされており、さらに多くの機能が継続的に追加されています。
yq は go で書かれているため、プラットフォームに依存関係のないバイナリをダウンロードすれば準備完了です。必要に応じて、Docker や Podman だけでなく、以下にリストされているさまざまなパッケージ マネージャーを使用できます。
値を読み取ります。
yq '.ab[0].c' ファイル.yaml
STDIN からパイプします:
yq '.ab[0].c' < file.yaml
yaml ファイルをその場で更新する
yq -i '.ab[0].c = "クール"' ファイル.yaml
環境変数を使用して更新する
NAME=mike yq -i '.ab[0].c = strenv(NAME)' file.yaml
複数のファイルを結合する
# 2 つのファイルをマージしますsyq -n 'load("file1.yaml") *load("file2.yaml")'# globs を使用してマージします:# シーケンスではなくすべてのファイルを一度に評価する `ea` の使用に注意してください#yqええ。 as $item ireduce ({}; . * $item )' path/to/*.yml
yaml ファイルに対する複数の更新
yq -i ' .ab[0].c = "クール" | .xyz = "フーバー" | .person.name = strenv(NAME)' ファイル.yaml
配列内の項目を検索して更新します。
yq '(.[] | select(.name == "foo") | .address) = "12 cat st"'
JSON から YAML への変換
yq -Poy サンプル.json
その他の例についてはレシピを、詳細についてはドキュメントを参照してください。
よくある質問や素晴らしいアイデアについてのディスカッションをご覧ください。
wget を使用して、gzip 圧縮されたコンパイル済みバイナリをダウンロードします。
たとえば、VERSION=v4.2.0 および BINARY=yq_linux_amd64 です。
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
wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -O /usr/bin/yq && chmod +x /usr/bin/yq
自作の使用
brew install yq
snap install yq
yq
スナップで厳密に制限されてインストールされます。これは、ルート ファイルに直接アクセスできないことを意味します。ルート ファイルを読み取るには、次のことができます。
sudo cat /etc/myfile | yq '.a.path'
ルート ファイルに書き込むには、スポンジを使用します。
sudo cat /etc/myfile | yq '.a.path = "value"' | sudo sponge /etc/myfile
または、一時ファイルに書き込みます。
sudo cat /etc/myfile | yq '.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 [コマンド] [フラグ] [式 ]FILE...
必要に応じて、ネットワーク アクセスやその他の権限なしで docker でyq
実行できることに注意してください。つまり、 --security-opt=no-new-privileges --cap-drop all --network none
です。
podman run --rm -v "${PWD}":/workdir mikefarah/yq [コマンド] [フラグ] [式 ]FILE...
-i--interactive
フラグを docker に渡す必要があります。
docker run -i --rm mikefarah/yq '.this.thing' < myfile.yml
podman run -i --rm mikefarah/yq '.this.thing' < myfile.yml
docker run --rm -it -v "${PWD}":/workdir --entrypoint sh mikefarah/yq
ポッドマン実行 --rm -it -v "${PWD}":/workdir --entrypoint sh mikefarah/yq
docker コマンド全体を入力することを避けるために bash 関数があると便利です。
yq() { docker run --rm -i -v "${PWD}":/workdir mikefarah/yq "$@"}
yq() { ポッドマン実行 --rm -i -v "${PWD}":/workdir mikefarah/yq "$@"}
yq
のコンテナ イメージは root (#860) で実行されなくなりました。コンテナー イメージにさらに多くのものをインストールしたい場合、またはファイルの読み取り/書き込み時に権限の問題が発生した場合は、次のいずれかを行う必要があります。
docker run --user="root" -it --entrypoint sh mikefarah/yq
podman run --user="root" -it --entrypoint sh mikefarah/yq
または、Dockerfile で次のようにします。
FROM mikefarah/yq USER root RUN apk add --no-cache bash USER yq
デフォルトでは、yq が使用する高山イメージにはタイムゾーン データが含まれません。 tz
演算子を使用したい場合は、次のデータを含める必要があります。
FROM mikefarah/yq USER root RUN apk add --no-cache tzdata USER yq
SELinux で podman を使用している場合は、ボリューム マウントに共有ボリューム フラグ:z
を設定する必要があります。
-v "${PWD}":/workdir:z
- name: Set foobar to cool uses: mikefarah/yq@master with: cmd: yq -i '.foo.bar = "cool"' 'config.yml' - name: Get an entry with a variable that might contain dots or spaces id: get_username uses: mikefarah/yq@master with: cmd: yq '.all.children.["${{ matrix.ip_address }}"].username' ops/inventories/production.yml - name: Reuse a variable obtained in another step run: echo ${{ steps.get_username.outputs.result }}
詳細については、https://mikefarah.gitbook.io/yq/usage/github-action を参照してください。
go install github.com/mikefarah/yq/v4@latest
これらはコミュニティによってサポートされているため、❤️ - ただし、正式にサポートされているリリースよりも古くなっている可能性があります。
Debian パッケージ (以前は @rmescandon によってサポートされていました) は現在メンテナンスされていないことに注意してください。別のインストール方法を使用してください。
x-cmd でyq
をチェックアウト: https://x-cmd.com/mod/yq
インスタント結果: yq フィルターの出力をリアルタイムで確認します。
エラー処理: 構文エラーが発生しましたか?エラーメッセージと、最も近い有効なフィルターの結果が表示されます。
ありがとう@edwinjhlee!
nix profile install nixpkgs#yq-go
ここを参照
webi yq
@adithyasunil26 がサポートする webi を参照してください (https://github.com/webinstall/webi-installers/tree/master/yq)
pacman -S go-yq
チョコレートティの使用
choco install yq
@chillum によるサポート (https://chocolatey.org/packages/yq)
スコップの使い方
scoop install main/yq
Winget の使用
winget install --id MikeFarah.yq
MacPort の使用
sudo port selfupdate sudo port install yq
@herbygillot によるサポート (https://ports.macports.org/maintainer/github/herbygillot)
Alpine Linux v3.20+ (および Edge):
apk add yq-go
Alpine Linux v3.19 まで:
apk add yq
Tuan Hoang によるサポート (https://pkgs.alpinelinux.org/packages?name=yq-go)
Flox を使用すると、WSL を通じて Linux、MacOS、および Windows に yq をインストールできます。
flox install yq
多くの例を含む詳細なドキュメント
ポータブル Go で書かれているので、依存関係のない素敵なバイナリをダウンロードできます
jq
と同様の構文を使用しますが、YAML、JSON、および XML ファイルで動作します
マルチドキュメント yaml ファイルを完全にサポート
yaml 前付ブロック (例: jekyll/assemble) をサポートします。
色付きの yaml 出力
TZ を使用した日付/時刻の操作と書式設定
深いデータ構造
ソートキー
yaml コメント、スタイル、タグ、アンカー、エイリアスを操作します。
適切な場所で更新する
選択および更新する複雑な式
更新時に yaml の書式設定とコメントを保持します (ただし、空白に関する問題はあります)。
Base64データのデコード/エンコード
他のファイルからコンテンツをロードする
json/ndjson との間の変換
XML との間の変換
プロパティとの間の変換
csv/tsvとの相互変換
一般的なシェル補完スクリプト (bash/zsh/fish/powershell)
Reduce を使用すると、複数のファイルをマージしたり、配列やその他の派手なことを合計したりできます。
自動パイプラインで使用する Github Action (@devorbitus に感謝)
より詳細で高度な使用方法については、ドキュメントを参照してください。
Usage: yq [flags] yq [command] Examples: # yq defaults to 'eval' command if no command is specified. See "yq eval --help" for more examples. yq '.stuff' < myfile.yml # outputs the data at the "stuff" node from "myfile.yml" yq -i '.stuff = "foo"' myfile.yml # update myfile.yml in place Available Commands: completion Generate the autocompletion script for the specified shell eval (default) 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 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 --header-preprocess Slurp any header comments and separators before processing expression. (default true) -h, --help help for yq -I, --indent int sets indent level for output (default 2) -i, --inplace update the file in place of first file given. -p, --input-format string [yaml|y|xml|x] parse format for input. Note that json is a subset of yaml. (default "yaml") -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 docs from scratch. -o, --output-format string [yaml|y|json|j|props|p|xml|x] output format type. (default "yaml") -P, --prettyPrint pretty print, shorthand for '... style = ""' -s, --split-exp string print each result (or doc) into a file named (exp). [exp] argument must return a string. You can use $index in the expression as the result counter. --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 --xml-attribute-prefix string prefix for xml attributes (default "+") --xml-content-name string name for xml content (if no attribute name is present). (default "+content") Use "yq [command] --help" for more information about a command.
yq
コメントの位置と空白を可能な限り保持しようとしますが、すべてのシナリオを処理できるわけではありません (詳細については https://github.com/go-yaml/yaml/tree/v3 を参照してください)。
Powershell には、yq の引用に関する独自の意見があります。
「yes」、「no」は、yaml 1.2 標準でブール値として削除されました (yq が想定する標準です)。
より一般的な問題と解決策については、ヒントとテクニックを参照してください。