โปรเซสเซอร์ YAML, JSON และ XML แบบบรรทัดคำสั่งน้ำหนักเบาและพกพาสะดวก yq
ใช้ jq เช่นเดียวกับไวยากรณ์ แต่ใช้ได้กับไฟล์ yaml เช่นเดียวกับ json, xml, คุณสมบัติ, csv และ tsv ยังไม่รองรับทุกสิ่งที่ jq
ทำ - แต่รองรับการทำงานและฟังก์ชันทั่วไปส่วนใหญ่ และยังมีการเพิ่มสิ่งอื่น ๆ อย่างต่อเนื่อง
yq เขียนอยู่ใน go - ดังนั้นคุณสามารถดาวน์โหลดไบนารี่ฟรีสำหรับแพลตฟอร์มของคุณและคุณก็พร้อมแล้ว! หากคุณต้องการ มีตัวจัดการแพ็คเกจที่หลากหลายที่สามารถใช้ได้เช่นเดียวกับ Docker และ Podman ทั้งหมดนี้อยู่ในรายการด้านล่างนี้
อ่านค่า:
yq '.ab[0].c' file.yaml
ท่อจาก STDIN:
yq '.ab[0].c' < file.yaml
อัปเดตไฟล์ yaml แทน
yq -i '.ab[0].c = "เจ๋ง"' file.yaml
อัปเดตโดยใช้ตัวแปรสภาพแวดล้อม
NAME=ไมค์ yq -i '.ab[0].c = strenv(NAME)' file.yaml
รวมหลายไฟล์
# รวมสอง filesyq -n 'load("file1.yaml") * load("file2.yaml")'# ผสานโดยใช้ globs:# สังเกตการใช้ `ea` เพื่อประเมินไฟล์ทั้งหมดในครั้งเดียว# แทนที่จะใช้ตามลำดับ เอ' เป็น $item ireduce ({}; . * $item )' path/to/*.yml
การอัปเดตหลายครั้งในไฟล์ yaml
yq -i ' .ab[0].c = "เจ๋ง" | .xyz = "foobar" | .person.name = strenv(NAME)' file.yaml
ค้นหาและอัปเดตรายการในอาร์เรย์:
yq '(.[] | select(.name == "foo") | .address) = "12 cat st"'
แปลง JSON เป็น YAML
yq -Poy ตัวอย่าง. json
ดูสูตรอาหารสำหรับตัวอย่างเพิ่มเติมและเอกสารประกอบสำหรับข้อมูลเพิ่มเติม
ดูการสนทนาเพื่อดูคำถามทั่วไปและแนวคิดดีๆ
ใช้ wget เพื่อดาวน์โหลด gzipped ไบนารีที่คอมไพล์ไว้ล่วงหน้า:
ตัวอย่างเช่น 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
รับ 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
นักเทียบท่าวิ่ง --rm -v "${PWD}":/workdir mikefarah/yq [คำสั่ง] [ธง] [การแสดงออก] ไฟล์...
โปรดทราบว่าคุณสามารถเรียกใช้ yq
ใน docker โดยไม่ต้องเข้าถึงเครือข่ายและสิทธิ์อื่น ๆ หากคุณต้องการคือ --security-opt=no-new-privileges --cap-drop all --network none
podman run --rm -v "${PWD}":/workdir mikefarah/yq [คำสั่ง] [ธง] [การแสดงออก] ไฟล์...
คุณจะต้องส่งแฟล็ก -i--interactive
ไปยังนักเทียบท่า:
นักเทียบท่าวิ่ง -i --rm mikefarah/yq '.this.thing' < myfile.yml
podman run -i --rm mikefarah/yq '.this.thing' < myfile.yml
นักเทียบท่าวิ่ง --rm -it -v "${PWD}":/workdir --entrypoint sh mikefarah/yq
podman ทำงาน --rm -it -v "${PWD}":/workdir --entrypoint sh mikefarah/yq
การมีฟังก์ชัน bash มีประโยชน์เพื่อหลีกเลี่ยงการพิมพ์คำสั่ง docker ทั้งหมด:
ใช่() { นักเทียบท่าทำงาน --rm -i -v "${PWD}":/workdir mikefarah/yq "$@"}
ใช่() { podman ทำงาน --rm -i -v "${PWD}":/workdir mikefarah/yq "$@"}
อิมเมจคอนเทนเนอร์ของ yq
ไม่ทำงานภายใต้รูทอีกต่อไป (#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
หากคุณใช้ podman กับ SELinux คุณจะต้องตั้งค่าสถานะวอลลุ่มที่ใช้ร่วมกัน :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) จะไม่ได้รับการดูแลอีกต่อไป โปรดใช้วิธีการติดตั้งอื่น
ชำระเงิน yq
บน x-cmd: https://x-cmd.com/mod/yq
ผลลัพธ์ทันใจ: ดูผลลัพธ์ของตัวกรอง yq ของคุณแบบเรียลไทม์
การจัดการข้อผิดพลาด: พบข้อผิดพลาดทางไวยากรณ์หรือไม่ จะแสดงข้อความแสดงข้อผิดพลาดและผลลัพธ์ของตัวกรองที่ถูกต้องที่ใกล้เคียงที่สุด
ขอบคุณ @edwinjhlee!
nix profile install nixpkgs#yq-go
ดูที่นี่
webi yq
ดู webi สนับสนุนโดย @ adithyasunil26 (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 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
อัลไพน์ Linux สูงถึง v3.19:
apk add yq
สนับสนุนโดย Tuan Hoang (https://pkgs.alpinelinux.org/packages?name=yq-go)
Flox สามารถใช้ติดตั้ง yq บน Linux, MacOS และ Windows ผ่าน WSL
flox install yq
เอกสารรายละเอียดพร้อมตัวอย่างมากมาย
เขียนในรูปแบบ Portable Go ดังนั้นคุณจึงสามารถดาวน์โหลดไบนารี่ฟรีที่พึ่งพาได้
ใช้ไวยากรณ์ที่คล้ายกันเป็น jq
แต่ใช้ได้กับไฟล์ YAML, JSON และ XML
รองรับไฟล์ yaml หลายเอกสารอย่างสมบูรณ์
รองรับบล็อกส่วนหน้าของ yaml (เช่น เจคิลล์/แอสเซมบลี)
เอาต์พุต yaml ที่ปรับสีแล้ว
การจัดการวันที่/เวลาและการจัดรูปแบบด้วย TZ
โครงสร้างข้อมูลเชิงลึก
เรียงลำดับคีย์
จัดการความคิดเห็น การจัดรูปแบบ แท็ก แองเคอร์ และนามแฝงของ yaml
อัปเดตในสถานที่
นิพจน์ที่ซับซ้อนในการเลือกและอัปเดต
เก็บการจัดรูปแบบ yaml และความคิดเห็นเมื่ออัปเดต (แม้ว่าจะมีปัญหากับช่องว่าง)
ถอดรหัส/เข้ารหัสข้อมูล base64
โหลดเนื้อหาจากไฟล์อื่น
แปลงเป็น/จาก json/ndjson
แปลงเป็น/จาก xml
แปลงเป็น/จากคุณสมบัติ
แปลงเป็น/จาก CSV/TSV
สคริปต์การเติมเชลล์ทั่วไป (bash/zsh/fish/powershell)
ลดขนาดเพื่อรวมไฟล์หลายไฟล์หรือรวมอาร์เรย์หรือสิ่งแฟนซีอื่น ๆ
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
"ใช่", "ไม่" ถูกละทิ้งเป็นค่าบูลีนในมาตรฐาน yaml 1.2 ซึ่งเป็นมาตรฐาน yq ถือว่า
ดูเคล็ดลับและคำแนะนำสำหรับปัญหาและแนวทางแก้ไขทั่วไปเพิ่มเติม