معالج 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 = "cool"' file.yaml
التحديث باستخدام متغيرات البيئة
NAME=mike yq -i '.ab[0].c = strenv(NAME)' file.yaml
دمج ملفات متعددة
# دمج ملفين syq -n 'load("file1.yaml") *load("file2.yaml")'# دمج باستخدام globs:# لاحظ استخدام `ea` لتقييم جميع الملفات مرة واحدة# بدلاً من التسلسل عصام '. كما يتم إرجاع $item ({}; . * $item )' path/to/*.yml
تحديثات متعددة لملف yaml
yq -i ' .ab[0].c = "رائع" | .xyz = "foobar" | .person.name = strenv(NAME)' file.yaml
البحث عن عنصر في مصفوفة وتحديثه:
yq '(.[] | حدد(.name == "foo") | .address) = "12 قطة"'
تحويل JSON إلى YAML
yq -Poy Sample.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
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
مع تقييد صارم في أداة snap، وهذا يعني أنه لا يتمتع بإمكانية الوصول المباشر إلى الملفات الجذرية. لقراءة الملفات الجذرية يمكنك:
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 [command] [flags] [expression]FILE...
لاحظ أنه يمكنك تشغيل yq
في docker دون الوصول إلى الشبكة والامتيازات الأخرى إذا كنت ترغب في ذلك، وهي --security-opt=no-new-privileges --cap-drop all --network none
.
تشغيل podman --rm -v "${PWD}":/workdir mikefarah/yq [command] [flags] [expression]FILE...
ستحتاج إلى تمرير العلامة -i--interactive
إلى عامل الإرساء:
docker run -i --rm mikefarah/yq '.this.thing' < myfile.yml
تشغيل podman -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 لتجنب كتابة أمر عامل الإرساء بالكامل:
yq() { تشغيل عامل ميناء --rm -i -v "${PWD}":/workdir mikefarah/yq "$@"}
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
نظرًا لأن المجتمع يدعمها ❤️ - ومع ذلك، فقد تكون قديمة مع الإصدارات المدعومة رسميًا.
يرجى ملاحظة أن حزمة دبيان (المدعومة سابقًا بواسطة @rmescandon) لم تعد قيد الصيانة. الرجاء استخدام طريقة تثبيت بديلة.
الخروج yq
على x-cmd: https://x-cmd.com/mod/yq
نتائج فورية: شاهد مخرجات مرشح yq الخاص بك في الوقت الفعلي.
معالجة الأخطاء: هل تواجه خطأ في بناء الجملة؟ سيتم عرض رسالة الخطأ ونتائج أقرب عامل تصفية صالح
شكراedwinjhlee!
nix profile install nixpkgs#yq-go
انظر هنا
webi yq
راجع الويب المدعوم بواسطة @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
باستخدام منافذ ماك
sudo port selfupdate sudo port install yq
بدعم منherbygillot (https://ports.macports.org/maintainer/github/herbygillot)
Alpine Linux v3.20+ (و Edge):
apk add yq-go
جبال الألب لينكس حتى الإصدار 3.19:
apk add yq
بدعم من توان هوانغ (https://pkgs.alpinelinux.org/packages?name=yq-go)
يمكن استخدام Flox لتثبيت yq على Linux وMacOS وWindows من خلال WSL.
flox install yq
توثيق مفصل مع العديد من الأمثلة
مكتوب باللغة المحمولة، حتى تتمكن من تنزيل ثنائي جميل مجاني للتبعية
يستخدم بناء جملة مشابهًا لـ jq
ولكنه يعمل مع ملفات YAML وJSON وXML
يدعم بشكل كامل ملفات yaml متعددة المستندات
يدعم كتل المادة الأمامية yaml (مثل jekyll/assemble)
إخراج yaml الملون
معالجة التاريخ/الوقت وتنسيقهما باستخدام TZ
هياكل البيانات العميقة
فرز المفاتيح
التعامل مع تعليقات yaml والتصميم والعلامات والمثبتات والأسماء المستعارة.
التحديث في مكانه
تعبيرات معقدة لتحديد وتحديث
يحتفظ بتنسيق yaml والتعليقات عند التحديث (على الرغم من وجود مشكلات تتعلق بالمسافات البيضاء)
فك/تشفير بيانات base64
تحميل المحتوى من ملفات أخرى
تحويل من/إلى json/ndjson
تحويل من/إلى XML
تحويل من/إلى الخصائص
تحويل إلى/من CSV/TSV
البرامج النصية العامة لإكمال الصدفة (bash/zsh/fish/powershell)
قم بالتقليل لدمج ملفات متعددة أو جمع مصفوفة أو أشياء أخرى رائعة.
إجراء Github لاستخدامه في خط الأنابيب الآلي الخاص بك (شكرًا @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.
راجع النصائح والحيل لمزيد من المشاكل والحلول الشائعة.