prosesor YAML, JSON, dan XML baris perintah yang ringan dan portabel. yq
menggunakan sintaks seperti jq tetapi berfungsi dengan file yaml serta json, xml, properti, csv, dan tsv. Ini belum mendukung semua yang dilakukan jq
- tetapi mendukung operasi dan fungsi yang paling umum, dan masih banyak lagi yang ditambahkan terus menerus.
yq ditulis dalam go - sehingga Anda dapat mengunduh biner bebas ketergantungan untuk platform Anda dan Anda siap melakukannya! Jika Anda mau, ada beragam pengelola paket yang dapat digunakan selain Docker dan Podman, semuanya tercantum di bawah.
Membaca nilai:
yq '.ab[0].c' file.yaml
Pipa dari STDIN:
yq '.ab[0].c' < file.yaml
Perbarui file yaml, di tempatnya
yq -i '.ab[0].c = "keren"' file.yaml
Perbarui menggunakan variabel lingkungan
NAMA=mike yq -i '.ab[0].c = strenv(NAMA)' file.yaml
Gabungkan beberapa file
# menggabungkan dua fileyq -n 'load("file1.yaml") * load("file2.yaml")'# menggabungkan menggunakan gumpalan:# perhatikan penggunaan `ea` untuk mengevaluasi semua file sekaligus# alih-alih dalam sequenceyq ya '. sebagai $item ireduce ({}; . * $item )' path/to/*.yml
Beberapa pembaruan pada file yaml
yq -i ' .ab[0].c = "keren" | .xyz = "foobar" | .orang.nama = strenv(NAMA)' file.yaml
Temukan dan perbarui item dalam array:
yq '(.[] | pilih(.name == "foo") | .address) = "12 cat st"'
Ubah JSON menjadi YAML
yq -Poy sampel.json
Lihat resep untuk contoh lebih lanjut dan dokumentasi untuk informasi lebih lanjut.
Lihatlah diskusi untuk pertanyaan umum, dan ide-ide keren
Gunakan wget untuk mengunduh, biner gzip yang telah dikompilasi sebelumnya:
Misalnya, VERSION=v4.2.0 dan 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
dapatkan https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -O /usr/bin/yq && chmod +x /usr/bin/yq
Menggunakan Homebrew
brew install yq
snap install yq
yq
menginstal dengan batasan ketat di snap, ini berarti tidak memiliki akses langsung ke file root. Untuk membaca file root, Anda dapat:
sudo cat /etc/myfile | yq '.a.path'
Dan untuk menulis ke file root Anda bisa menggunakan sponge:
sudo cat /etc/myfile | yq '.a.path = "value"' | sudo sponge /etc/myfile
atau tulis ke file sementara:
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 [perintah] [bendera] [ekspresi ]FILE...
Perhatikan bahwa Anda dapat menjalankan yq
di buruh pelabuhan tanpa akses jaringan dan hak istimewa lainnya jika Anda menginginkannya, yaitu --security-opt=no-new-privileges --cap-drop all --network none
.
podman run --rm -v "${PWD}":/workdir mikefarah/yq [perintah] [bendera] [ekspresi ]FILE...
Anda harus meneruskan tanda -i--interactive
ke buruh pelabuhan:
buruh pelabuhan menjalankan -i --rm mikefarah/yq '.ini.sesuatu' podman jalankan -i --rm mikefarah/yq '.ini.sesuatu'Jalankan perintah secara interaktif:
menjalankan buruh pelabuhan --rm -it -v "${PWD}":/workdir --entrypoint sh mikefarah/yqpodman run --rm -it -v "${PWD}":/workdir --entrypoint sh mikefarah/yqAkan berguna jika memiliki fungsi bash untuk menghindari pengetikan seluruh perintah buruh pelabuhan:
kamuq() { menjalankan buruh pelabuhan --rm -i -v "${PWD}":/workdir mikefarah/yq "$@"}kamuq() { podman run --rm -i -v "${PWD}":/workdir mikefarah/yq "$@"}Berjalan sebagai root:
Gambar kontainer
yq
tidak lagi berjalan di bawah root (#860). Jika Anda ingin memasang lebih banyak hal di gambar kontainer, atau Anda mengalami masalah izin saat mencoba membaca/menulis file, Anda harus:docker run --user="root" -it --entrypoint sh mikefarah/yqpodman run --user="root" -it --entrypoint sh mikefarah/yqAtau, di Dockerfile Anda:
FROM mikefarah/yq USER root RUN apk add --no-cache bash USER yqData zona waktu tidak ada
Secara default, gambar alpine yang digunakan yq tidak menyertakan data zona waktu. Jika Anda ingin menggunakan operator
tz
, Anda harus menyertakan data ini:FROM mikefarah/yq USER root RUN apk add --no-cache tzdata USER yqPodman dengan SELinux
Jika Anda menggunakan podman dengan SELinux, Anda perlu menyetel flag volume bersama
:z
pada volume mount:-v "${PWD}":/workdir:zTindakan GitHub
- 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 }}Lihat https://mikefarah.gitbook.io/yq/usage/github-action untuk informasi lebih lanjut.
Pergi Instal:
go install github.com/mikefarah/yq/v4@latestMetode Instalasi yang Didukung Komunitas
Karena ini didukung oleh komunitas ❤️ - namun, rilis tersebut mungkin sudah ketinggalan jaman dibandingkan rilis yang didukung secara resmi.
Harap diperhatikan bahwa paket Debian (sebelumnya didukung oleh @rmescandon) tidak lagi dipertahankan. Silakan gunakan metode instalasi alternatif.
X-CMD
Periksa
yq
di x-cmd: https://x-cmd.com/mod/yq
Hasil Instan: Lihat keluaran filter yq Anda secara real-time.
Penanganan Kesalahan: Mengalami kesalahan sintaksis? Ini akan menampilkan pesan kesalahan dan hasil filter valid terdekat
Terima kasih @edwinjhlee!
Nix
nix profile install nixpkgs#yq-goLihat di sini
webi
webi yqLihat webi Didukung oleh @adithyasunil26 (https://github.com/webinstall/webi-installers/tree/master/yq)
Lengkungan Linux
pacman -S go-yqjendela:
Menggunakan Coklat
choco install yqDidukung oleh @chillum (https://chocolatey.org/packages/yq)
Menggunakan sendok
scoop install main/yqMenggunakan sayap
winget install --id MikeFarah.yqMac:
Menggunakan MacPort
sudo port selfupdate sudo port install yqDidukung oleh @herbygillot (https://ports.macports.org/maintainer/github/herbygillot)
Linux Alpen
Alpine Linux v3.20+ (dan Edge):
apk add yq-goAlpine Linux hingga v3.19:
apk add yqDidukung oleh Tuan Hoang (https://pkgs.alpinelinux.org/packages?name=yq-go)
phlox:
Flox dapat digunakan untuk menginstal yq di Linux, MacOS, dan Windows melalui WSL.
flox install yqFitur
Dokumentasi terperinci dengan banyak contoh
Ditulis dalam versi portabel, sehingga Anda dapat mengunduh biner bebas ketergantungan yang bagus
Menggunakan sintaksis yang mirip dengan
jq
tetapi berfungsi dengan file YAML, JSON, dan XMLSepenuhnya mendukung file yaml multi dokumen
Mendukung blok materi depan yaml (misalnya jekyll/assemble)
Keluaran yaml berwarna
Manipulasi Tanggal/Waktu dan pemformatan dengan TZ
Struktur data yang mendalam
Kunci pengurutan
Memanipulasi komentar, gaya, tag, jangkar, dan alias yaml.
Pembaruan di tempat
Ekspresi kompleks untuk dipilih dan diperbarui
Mempertahankan format dan komentar yaml saat memperbarui (walaupun ada masalah dengan spasi)
Dekode/Enkode data base64
Muat konten dari file lain
Konversi ke/dari json/ndjson
Konversi ke/dari xml
Konversi ke/dari properti
Konversi ke/dari csv/tsv
Skrip penyelesaian shell umum (bash/zsh/fish/powershell)
Kurangi untuk menggabungkan beberapa file atau menjumlahkan array atau hal-hal mewah lainnya.
Tindakan Github untuk digunakan dalam saluran otomatis Anda (terima kasih @devorbitus)
Penggunaan
Lihat dokumentasi untuk penggunaan lebih detail dan lanjutan.
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.Masalah Umum / Fitur Hilang
yq
berupaya mempertahankan posisi komentar dan spasi sebanyak mungkin, namun tidak menangani semua skenario (lihat https://github.com/go-yaml/yaml/tree/v3 untuk detailnya)Powershell memiliki...pendapatnya sendiri tentang mengutip yq
"ya", "tidak" dihilangkan sebagai nilai boolean dalam standar yaml 1.2 - yang merupakan standar yang diasumsikan yq.
Lihat tip dan trik untuk masalah dan solusi yang lebih umum.