تحقق من وثائق حزمة
jc
Python للمطورين
جرب العرض التوضيحي للويب
jc
وREST API
يتوفر
jc
كمكون إضافي لمرشح Ansible في المجموعةcommunity.general
. راجع منشور المدونة هذا للحصول على مثال.
تحويل جيسون
يقوم jc
JSON بتحديد مخرجات العديد من أدوات CLI وأنواع الملفات والسلاسل الشائعة لتسهيل التحليل في البرامج النصية. راجع قسم المحللون لمعرفة الأوامر وأنواع الملفات والسلاسل المدعومة.
dig example.com | jc --dig
[{ "id" : 38052 , "opcode" : " QUERY " , "status" : " NOERROR " , "flags" :[ " qr " , " rd " , " ra " ],
"query_num" : 1 , "answer_num" : 1 , "authority_num" : 0 , "additional_num" : 1 ,
"opt_pseudosection" :{ "edns" :{ "version" : 0 , "flags" :[], "udp" : 4096 }}, "question" :
{ "name" : " example.com. " , "class" : " IN " , "type" : " A " }, "answer" :[{ "name" :
" example.com. " , "class" : " IN " , "type" : " A " , "ttl" : 39049 , "data" : " 93.184.216.34 " }],
"query_time" : 49 , "server" : " 2600:1700:bab0:d40::1#53(2600:1700:bab0:d40::1) " ,
"when" : " Fri Apr 16 16:09:00 PDT 2021 " , "rcvd" : 56 , "when_epoch" : 1618614540 ,
"when_epoch_utc" : null }]
يسمح هذا بمزيد من معالجة سطر الأوامر للمخرجات باستخدام أدوات مثل jq
أو jello
عن طريق توجيه الأوامر:
$ dig example.com | jc --dig | jq -r ' .[].answer[].data '
93.184.216.34
أو باستخدام بناء الجملة "السحري" البديل:
$ jc dig example.com | jq -r ' .[].answer[].data '
93.184.216.34
يمكن أيضًا استخدام jc
كمكتبة بيثون. في هذه الحالة، ستكون القيمة التي تم إرجاعها عبارة عن قاموس بايثون، أو قائمة قواميس، أو حتى قواميس قابلة للتكرار بدلًا من JSON:
> >> import subprocess
> >> import jc
> >>
>> > cmd_output = subprocess . check_output ([ 'dig' , 'example.com' ], text = True )
> >> data = jc . parse ( 'dig' , cmd_output )
> >>
>> > data [ 0 ][ 'answer' ]
[{ 'name' : 'example.com.' , 'class' : 'IN' , 'type' : 'A' , 'ttl' : 29658 , 'data' :
'93.184.216.34' }]
للحصول على وثائق حزمة
jc
Python، استخدمhelp('jc')
أوhelp('jc.lib')
أو راجع الوثائق عبر الإنترنت.
يتوفر تمثيلين للبيانات. يستخدم التمثيل الافتراضي مخططًا صارمًا لكل محلل ويحول الأرقام المعروفة إلى قيم int/float JSON. يتم تحويل بعض القيم المعروفة من None
إلى JSON null
، ويتم تحويل القيم المنطقية المعروفة، وفي بعض الحالات، تتم إضافة حقول سياق دلالية إضافية.
للوصول إلى JSON الخام والمعالج مسبقًا، استخدم الخيار -r
cli أو معلمة الدالة raw=True
في parse()
عند استخدام jc
كمكتبة بايثون.
يمكن العثور على المخططات الخاصة بكل محلل على رابط التوثيق بجانب كل محلل أدناه.
يمكن العثور على ملاحظات الإصدار في قسم الإصدارات على Github.
لمزيد من المعلومات حول دوافع هذا المشروع، يرجى الاطلاع على تدوينة مدونتي حول جلب فلسفة يونكس إلى القرن الحادي والعشرين ومقابلتي مع Console.
أنظر أيضا:
حالات الاستخدام:
هناك عدة طرق للحصول على jc
. يمكنك التثبيت عبر pip
أو مستودعات حزمة نظام التشغيل أو عن طريق تنزيل الملف الثنائي الصحيح للبنية الخاصة بك وتشغيله في أي مكان على نظام الملفات الخاص بك.
pip3 install jc
نظام التشغيل | يأمر |
---|---|
ديبيان/أوبونتو لينكس | apt-get install jc |
فيدورا لينكس | dnf install jc |
أوبن سوزي لينكس | zypper install jc |
قوس لينكس | pacman -S jc |
نيكس أو إس لينكس | nix-env -iA nixpkgs.jc أو nix-env -iA nixos.jc |
نظام غيكس لينكس | guix install jc |
جنتو لينكس | emerge dev-python/jc |
فوتون لينكس | tdnf install jc |
ماك | brew install jc |
فري بي إس دي | portsnap fetch update && cd /usr/ports/textproc/py-jc && make install clean |
البرنامج المساعد مرشح Ansible | ansible-galaxy collection install community.general |
موصل فورتيسور | التثبيت من FortiSOAR Connector Marketplace |
لمزيد من حزم نظام التشغيل، راجع https://repology.org/project/jc/versions.
بالنسبة للثنائيات المترجمة مسبقًا، راجع الإصدارات على Github.
يقبل jc
الإدخال عبر الأنابيب من STDIN
ويخرج تمثيل JSON لمخرجات الأمر السابق إلى STDOUT
.
COMMAND | jc [SLICE] [OPTIONS] PARSER
cat FILE | jc [SLICE] [OPTIONS] PARSER
echo STRING | jc [SLICE] [OPTIONS] PARSER
وبدلاً من ذلك، يمكن استخدام بناء الجملة "السحري" عن طريق إضافة jc
مسبقًا إلى الأمر المطلوب تحويله أو أمام المسار المطلق لملفات Proc. يمكن تمرير الخيارات إلى jc
مباشرة قبل إعطاء الأمر أو مسار ملف Proc. (ملاحظة: الأسماء المستعارة للأوامر ومكونات Shell غير مدعومة)
jc [SLICE] [OPTIONS] COMMAND
jc [SLICE] [OPTIONS] /proc/ < path-to-procfile >
يمكن أن يكون إخراج JSON مضغوطًا (افتراضيًا) أو منسقًا بشكل جميل باستخدام الخيار -p
.
دعوى | الأمر أو نوع الملف | التوثيق |
---|---|---|
--acpi | محلل أوامر acpi | تفاصيل |
--airport | airport -I محلل القيادة | تفاصيل |
--airport-s | محلل أوامر airport -s | تفاصيل |
--apt-cache-show | apt-cache show محلل الأوامر | تفاصيل |
--apt-get-sqq | apt-get -sqq محلل الأوامر | تفاصيل |
--arp | محلل أوامر arp | تفاصيل |
--asciitable | محلل جدول ASCII وUnicode | تفاصيل |
--asciitable-m | محلل جدول ASCII وUnicode متعدد الأسطر | تفاصيل |
--blkid | محلل الأوامر blkid | تفاصيل |
--bluetoothctl | محلل أوامر bluetoothctl | تفاصيل |
--cbt | محلل أوامر cbt (Google Bigtable). | تفاصيل |
--cef | محلل سلسلة CEF | تفاصيل |
--cef-s | محلل دفق سلسلة CEF | تفاصيل |
--certbot | محلل أوامر certbot | تفاصيل |
--chage | chage --list محلل الأوامر | تفاصيل |
--cksum | محلل الأوامر cksum و sum | تفاصيل |
--clf | محلل ملف تنسيق السجل المشترك والمدمج | تفاصيل |
--clf-s | محلل دفق ملف تنسيق السجل المشترك والمجمع | تفاصيل |
--crontab | أمر crontab ومحلل الملفات | تفاصيل |
--crontab-u | محلل ملف crontab مع دعم المستخدم | تفاصيل |
--csv | محلل ملف CSV | تفاصيل |
--csv-s | محلل دفق ملف CSV | تفاصيل |
--curl-head | curl --head محلل الأوامر | تفاصيل |
--date | محلل أمر date | تفاصيل |
--datetime-iso | محلل سلسلة التاريخ والوقت ISO 8601 | تفاصيل |
--debconf-show | محلل الأوامر debconf-show | تفاصيل |
--df | محلل أوامر df | تفاصيل |
--dig | dig أمر الحفر | تفاصيل |
--dir | dir الأوامر دير | تفاصيل |
--dmidecode | محلل الأوامر dmidecode | تفاصيل |
--dpkg-l | dpkg -l محلل الأوامر | تفاصيل |
--du | محلل أوامر du | تفاصيل |
--efibootmgr | محلل الأوامر efibootmgr | تفاصيل |
--email-address | محلل سلسلة عنوان البريد الإلكتروني | تفاصيل |
--env | محلل أمر env | تفاصيل |
--ethtool | محلل أوامر ethtool | تفاصيل |
--file | محلل أمر file | تفاصيل |
--find | find محلل الأوامر | تفاصيل |
--findmnt | محلل أمر findmnt | تفاصيل |
--finger | محلل أمر finger | تفاصيل |
--free | محلل الأوامر free | تفاصيل |
--fstab | /etc/fstab محلل الملف | تفاصيل |
--git-log | محلل أوامر git log | تفاصيل |
--git-log-s | محلل تدفق أوامر git log | تفاصيل |
--git-ls-remote | محلل الأوامر git ls-remote | تفاصيل |
--gpg | gpg --with-colons محلل الأوامر | تفاصيل |
--group | /etc/group | تفاصيل |
--gshadow | /etc/gshadow محلل الملف | تفاصيل |
--hash | محلل أمر hash | تفاصيل |
--hashsum | محلل أوامر hashsum ( md5sum ، shasum ، وما إلى ذلك) | تفاصيل |
--hciconfig | محلل الأوامر hciconfig | تفاصيل |
--history | محلل أمر history | تفاصيل |
--host | محلل أمر host | تفاصيل |
--hosts | /etc/hosts محلل الملفات | تفاصيل |
--http-headers | محلل رؤوس HTTP | تفاصيل |
--id | id أمر الهوية | تفاصيل |
--ifconfig | محلل أمر ifconfig | تفاصيل |
--ini | محلل ملف INI | تفاصيل |
--ini-dup | INI مع محلل ملف مفتاح مكرر | تفاصيل |
--iostat | محلل أوامر iostat | تفاصيل |
--iostat-s | محلل دفق الأوامر iostat | تفاصيل |
--ip-address | محلل سلسلة عناوين IPv4 وIPv6 | تفاصيل |
--ipconfig | ipconfig محلل أوامر Windows | تفاصيل |
--iptables | محلل أوامر iptables | تفاصيل |
--ip-route | محلل أمر ip route | تفاصيل |
--iw-scan | iw dev [device] scan أمر الفحص | تفاصيل |
--iwconfig | محلل أوامر iwconfig | تفاصيل |
--jar-manifest | محلل ملف Java MANIFEST.MF | تفاصيل |
--jobs | محلل أوامر jobs | تفاصيل |
--jwt | محلل سلسلة JWT | تفاصيل |
--kv | ملف المفتاح/القيمة ومحلل السلسلة | تفاصيل |
--kv-dup | المفتاح/القيمة مع ملف مفتاح مكرر ومحلل سلسلة | تفاصيل |
--last | محلل الأوامر last lastb | تفاصيل |
--ls | محلل الأوامر ls | تفاصيل |
--ls-s | ls محلل دفق الأمر | تفاصيل |
--lsattr | محلل الأوامر lsattr | تفاصيل |
--lsb-release | محلل الأوامر lsb_release | تفاصيل |
--lsblk | محلل الأوامر lsblk | تفاصيل |
--lsmod | محلل أوامر lsmod | تفاصيل |
--lsof | محلل الأوامر lsof | تفاصيل |
--lspci | lspci -mmv محلل الأوامر | تفاصيل |
--lsusb | محلل الأوامر lsusb | تفاصيل |
--m3u | محلل الملفات M3U وM3U8 | تفاصيل |
--mdadm | mdadm محلل الأوامر | تفاصيل |
--mount | محلل أمر mount | تفاصيل |
--mpstat | محلل الأوامر mpstat | تفاصيل |
--mpstat-s | محلل دفق الأوامر mpstat | تفاصيل |
--needrestart | needrestart -b محلل الأوامر | تفاصيل |
--netstat | محلل أمر netstat | تفاصيل |
--nmcli | محلل الأوامر nmcli | تفاصيل |
--nsd-control | محلل أمر nsd-control | تفاصيل |
--ntpq | محلل الأوامر ntpq -p | تفاصيل |
--openvpn | محلل ملف openvpn-status.log | تفاصيل |
--os-prober | محلل الأوامر os-prober | تفاصيل |
--os-release | /etc/os-release file parser | تفاصيل |
--pacman | محلل أوامر pacman | تفاصيل |
--passwd | /etc/passwd محلل الملف | تفاصيل |
--path | محلل سلسلة المسار POSIX | تفاصيل |
--path-list | محلل سلسلة قائمة مسار POSIX | تفاصيل |
--pci-ids | محلل ملف pci.ids | تفاصيل |
--pgpass | محلل ملف كلمة المرور PostgreSQL | تفاصيل |
--pidstat | pidstat -H محلل الأوامر | تفاصيل |
--pidstat-s | pidstat -H محلل دفق الأوامر | تفاصيل |
--ping | محلل أوامر ping و ping6 | تفاصيل |
--ping-s | محلل دفق الأوامر ping و ping6 | تفاصيل |
--pip-list | محلل أوامر pip list | تفاصيل |
--pip-show | محلل أوامر pip show النقطة | تفاصيل |
--pkg-index-apk | Alpine Linux Package Index محلل الملفات | تفاصيل |
--pkg-index-deb | محلل ملف فهرس حزمة دبيان | تفاصيل |
--plist | محلل ملف PLIST | تفاصيل |
--postconf | postconf -M محلل الأوامر | تفاصيل |
--proc | /proc/ محلل الملف | تفاصيل |
--ps | محلل الأوامر ps | تفاصيل |
--resolve-conf | /etc/resolve.conf محلل الملف | تفاصيل |
--route | محلل أمر route | تفاصيل |
--rpm-qi | rpm -qi محلل الأوامر | تفاصيل |
--rsync | محلل أوامر rsync | تفاصيل |
--rsync-s | محلل دفق الأوامر rsync | تفاصيل |
--semver | محلل سلسلة الإصدار الدلالي | تفاصيل |
--sfdisk | محلل الأوامر sfdisk | تفاصيل |
--shadow | /etc/shadow | تفاصيل |
--srt | محلل ملف SRT | تفاصيل |
--ss | محلل أوامر ss | تفاصيل |
--ssh-conf | ملف التكوين ssh ومحلل أوامر ssh -G | تفاصيل |
--sshd-conf | ملف التكوين sshd ومحلل الأوامر sshd -T | تفاصيل |
--stat | محلل أوامر stat | تفاصيل |
--stat-s | محلل دفق الأمر stat | تفاصيل |
--swapon | swapon أوامر المبادلة | تفاصيل |
--sysctl | محلل الأوامر sysctl | تفاصيل |
--syslog | محلل سلسلة Syslog RFC 5424 | تفاصيل |
--syslog-s | محلل دفق السلسلة Syslog RFC 5424 | تفاصيل |
--syslog-bsd | محلل سلسلة Syslog RFC 3164 | تفاصيل |
--syslog-bsd-s | محلل دفق السلسلة Syslog RFC 3164 | تفاصيل |
--systemctl | محلل أوامر systemctl | تفاصيل |
--systemctl-lj | محلل أوامر systemctl list-jobs | تفاصيل |
--systemctl-ls | محلل أوامر systemctl list-sockets | تفاصيل |
--systemctl-luf | محلل أوامر systemctl list-unit-files | تفاصيل |
--systeminfo | محلل أوامر systeminfo | تفاصيل |
--time | /usr/bin/time محلل الأوامر | تفاصيل |
--timedatectl | محلل أمر timedatectl status | تفاصيل |
--timestamp | Unix Epoch Timestamp محلل سلسلة | تفاصيل |
--toml | محلل ملف TOML | تفاصيل |
--top | محلل الأوامر top -b | تفاصيل |
--top-s | محلل دفق الأوامر top -b | تفاصيل |
--tracepath | tracepath و tracepath6 محلل الأوامر | تفاصيل |
--traceroute | traceroute و traceroute6 محلل الأوامر | تفاصيل |
--tune2fs | tune2fs -l محلل الأوامر | تفاصيل |
--udevadm | محلل أوامر udevadm info | تفاصيل |
--ufw | محلل أمر ufw status | تفاصيل |
--ufw-appinfo | ufw app info [application] محلل الأوامر | تفاصيل |
--uname | uname -a محلل الأوامر | تفاصيل |
--update-alt-gs | update-alternatives --get-selections محلل أوامر الحصول على التحديدات | تفاصيل |
--update-alt-q | update-alternatives --query محلل أمر الاستعلام | تفاصيل |
--upower | محلل الأوامر upower | تفاصيل |
--uptime | محلل أوامر uptime | تفاصيل |
--url | محلل سلسلة URL | تفاصيل |
--ver | محلل سلسلة الإصدار | تفاصيل |
--veracrypt | محلل أوامر veracrypt | تفاصيل |
--vmstat | محلل الأوامر vmstat | تفاصيل |
--vmstat-s | محلل دفق الأوامر vmstat | تفاصيل |
--w | w محلل الأوامر | تفاصيل |
--wc | محلل أوامر wc | تفاصيل |
--wg-show | wg show محلل الأوامر | تفاصيل |
--who | who يأمرون المحلل | تفاصيل |
--x509-cert | محلل ملف شهادة X.509 PEM وDER | تفاصيل |
--x509-csr | محلل ملف طلب شهادة X.509 PEM وDER | تفاصيل |
--xml | محلل ملف XML | تفاصيل |
--xrandr | محلل أوامر xrandr | تفاصيل |
--yaml | محلل ملف YAML | تفاصيل |
--zipinfo | محلل أوامر zipinfo | تفاصيل |
--zpool-iostat | محلل الأوامر zpool iostat | تفاصيل |
--zpool-status | محلل أمر zpool status | تفاصيل |
قصير | طويل | وصف |
---|---|---|
-a | --about | حول jc . يطبع معلومات حول jc والموزعين (في JSON أو YAML، بالطبع!) |
-C | --force-color | فرض إخراج اللون حتى عند استخدام الأنابيب (يتجاوز -m ومتغير البيئة NO_COLOR ) |
-d | --debug | وضع التصحيح. طباعة رسائل التتبع في حالة مواجهة مشكلات في التحليل (استخدم -dd للتصحيح المطول) |
-h | --help | يساعد. استخدم jc -h --parser_name لتوثيق المحلل اللغوي. استخدمه مرتين لإظهار المحلل اللغوي المخفي (على سبيل المثال -hh ). استخدم ثلاث مرات لإظهار فئات المحلل اللغوي (على سبيل المثال -hhh ). |
-m | --monochrome | إخراج أحادي اللون |
-M | --meta-out | أضف البيانات الوصفية إلى الإخراج بما في ذلك الطابع الزمني واسم المحلل اللغوي والأمر السحري ورمز الخروج للأمر السحري وما إلى ذلك. |
-p | --pretty | قم بتنسيق إخراج JSON بشكل جميل |
-q | --quiet | الوضع الهادئ. يمنع رسائل تحذير المحلل اللغوي (استخدم -qq لتجاهل أخطاء المحلل اللغوي) |
-r | --raw | الإخراج الخام. يوفر مخرجات أكثر حرفية، عادةً مع قيم سلسلة وبدون معالجة دلالية إضافية |
-s | --slurp | ابتلع أسطر متعددة في صفيف. (استخدم -hhh للعثور على الموزعين المتوافقين) |
-u | --unbuffer | إخراج غير مؤقت |
-v | --version | معلومات الإصدار |
-y | --yaml-out | إخراج يامل |
-B | --bash-comp | إنشاء البرنامج النصي لإكمال Bash Shell (مزيد من المعلومات) |
-Z | --zsh-comp | إنشاء البرنامج النصي لإكمال Zsh Shell (مزيد من المعلومات) |
يتم دعم تقطيع الخط باستخدام بناء START:STOP
المشابه لتقطيع Python. يتيح لك هذا تخطي الأسطر الموجودة في بداية و/أو نهاية إدخال STDIN
الذي ترغب في تحويله من jc
.
يمكن أن تكون START
و STOP
أعدادًا صحيحة موجبة أو سالبة أو فارغة وتسمح لك بتحديد عدد الأسطر التي يجب تخطيها وعدد الأسطر التي تريد معالجتها. تعتبر الشرائح الموجبة والفارغة هي الأكثر كفاءة في الذاكرة. ستستخدم أي أعداد صحيحة سالبة في الشريحة المزيد من الذاكرة.
على سبيل المثال، لتخطي السطر الأول والأخير من النص التالي، يمكنك التعبير عن الشريحة بطريقتين:
$ cat table.txt
# ## We want to skip this header ###
col1 col2
foo 1
bar 2
# ## We want to skip this footer ###
$ cat table.txt | jc 1:-1 --asciitable
[{ " col1 " : " foo " , " col2 " : " 1 " },{ " col1 " : " bar " , " col2 " : " 2 " }]
$ cat table.txt | jc 1:4 --asciitable
[{ " col1 " : " foo " , " col2 " : " 1 " },{ " col1 " : " bar " , " col2 " : " 2 " }]
في هذا المثال، توفر شرائح الخط 1:-1
و 1:4
نفس المخرجات.
عند استخدام الأعداد الصحيحة الموجبة، يكون موقع فهرس STOP
غير شامل. يتم حساب الشرائح الموجبة من السطر الأول من الإدخال باتجاه النهاية بدءًا من 0
كالسطر الأول. يتم حساب الشرائح السالبة من السطر الأخير باتجاه البداية بدءًا من -1
باعتباره السطر الأخير. هذه أيضًا هي الطريقة التي تعمل بها ميزة التقطيع في بايثون.
فيما يلي تفصيل لخيارات شريحة الخط:
تدوين الشريحة | تمت معالجة خطوط الإدخال |
---|---|
START:STOP | الخطوط START من خلال STOP - 1 |
START: | START الخطوط خلال بقية الإخراج |
:STOP | الخطوط من البداية حتى STOP - 1 |
-START:STOP | خطوط START من النهاية حتى STOP - 1 |
START:-STOP | خطوط START من خلال خطوط STOP من النهاية |
-START:-STOP | START الخطوط من النهاية عبر خطوط STOP من النهاية |
-START: | START الأسطر من النهاية حتى بقية الإخراج |
:-STOP | خطوط من البداية حتى خطوط STOP من النهاية |
: | جميع الخطوط |
يدعم بعض المحللين إدخال عناصر متعددة ويمكنهم إخراج مجموعة من النتائج في مسار واحد. يعمل Slurping مع محللي السلسلة الذين يقبلون سطرًا واحدًا من الإدخال. (على سبيل المثال url
ip-address
) لرؤية قائمة المحللين الذين يدعمون خيار --slurp
، استخدم jc -hhh
.
على سبيل المثال، يمكنك إرسال ملف يحتوي على عناوين IP متعددة (واحد لكل سطر) إلى jc
باستخدام خيار --slurp
وسيتم إخراج مجموعة من النتائج:
$ cat ip-addresses.txt | jc --slurp --ip-address
[ < multiple output objects > ]
يدعم بناء الجملة السحري لملفات /proc
تلقائيًا التهام ملفات متعددة (لا داعي لاستخدام خيار --slurp
). على سبيل المثال، يمكنك تحويل العديد من ملفات PID مرة واحدة:
$ jc /proc/ * /status
[ < multiple output objects > ]
عند استخدام بناء الجملة السحري /proc
وتحديد ملفات متعددة، يتم إدراج حقل _file
إضافي في الإخراج بحيث يكون من الأسهل معرفة الملف الذي يشير إليه كل كائن إخراج.
أخيرًا، يمكن استخدام خيار --meta-out
جنبًا إلى جنب مع المخرجات المُبتلعة. في هذه الحالة، يتم تغليف المخرجات المُبتلعة في كائن بالبنية التالية:
{
"result" : [ ],
"_jc_meta" : {
"parser" : " url " ,
"timestamp" : 1706235558.654576 ,
"slice_start" : null ,
"slice_end" : null ,
"input_list" : [
" http://www.google.com " ,
" https://www.apple.com " ,
" https://www.microsoft.com "
]
}
}
باستخدام --meta-out
، تحتوي input_list
على قائمة المدخلات (سلاسل الإدخال الفعلية أو أسماء ملفات /proc
) حتى تتمكن من تحديد كائن الإخراج الذي يرتبط بكل سلسلة إدخال أو اسم ملف /proc
.
أي أخطاء فادحة داخل jc
سوف تولد رمز خروج 100
، وإلا فإن رمز الخروج سيكون 0
.
عند استخدام الصيغة "السحرية" (على سبيل المثال jc ifconfig eth0
)، سيقوم jc
بتخزين رمز الخروج الخاص بالبرنامج الذي يتم تحليله وإضافته إلى رمز الخروج jc
. بهذه الطريقة يكون من الأسهل تحديد ما إذا كان الخطأ من البرنامج الذي تم تحليله أو من jc
.
خذ بعين الاعتبار الأمثلة التالية باستخدام ifconfig
:
رمز الخروج ifconfig | رمز الخروج jc | رمز الخروج المشترك | تفسير |
---|---|---|---|
0 | 0 | 0 | لا توجد أخطاء |
1 | 0 | 1 | خطأ في ifconfig |
0 | 100 | 100 | خطأ في jc |
1 | 100 | 101 | خطأ في كل من ifconfig و jc |
عند استخدام الصيغة "السحرية"، يمكنك أيضًا استرداد رمز الخروج للبرنامج المطلوب باستخدام الخيار --meta-out
أو -M
. سيؤدي هذا إلى إلحاق كائن _jc_meta
بالمخرج الذي سيتضمن معلومات الأمر السحري، بما في ذلك رمز الخروج.
هنا مثال مع ping
:
$ jc --meta-out -p ping -c2 192.168.1.252
{
" destination_ip " : " 192.168.1.252 " ,
" data_bytes " : 56,
" pattern " : null,
" destination " : " 192.168.1.252 " ,
" packets_transmitted " : 2,
" packets_received " : 0,
" packet_loss_percent " : 100.0,
" duplicates " : 0,
" responses " : [
{
" type " : " timeout " ,
" icmp_seq " : 0,
" duplicate " : false
}
],
" _jc_meta " : {
" parser " : " ping " ,
" timestamp " : 1661357115.27949,
" magic_command " : [
" ping " ,
" -c2 " ,
" 192.168.1.252 "
],
" magic_command_exit " : 2
}
}
$ echo $?
2
يمكنك تحديد ألوان مخصصة عبر متغير البيئة JC_COLORS
. يأخذ متغير البيئة JC_COLORS
أربع قيم سلسلة مفصولة بفواصل بالتنسيق التالي:
JC_COLORS= < keyname_color > , < keyword_color > , < number_color > , < string_color >
حيث تكون الألوان: black
أو red
أو green
أو yellow
أو blue
أو أرجواني أو magenta
cyan
أو gray
brightblack
أو brightred
أو brightgreen
أو brightyellow
أو أزرق ساطع أو brightblue
أو brightcyan
brightmagenta
white
أو default
على سبيل المثال، لتعيين الألوان الافتراضية:
JC_COLORS=blue,brightblack,magenta,green
أو
JC_COLORS=default,default,default,default
يمكنك ضبط متغير البيئة NO_COLOR
على أي قيمة لتعطيل إخراج اللون في jc
. لاحظ أن استخدام الخيار -C
لفرض إخراج اللون سيتجاوز كلاً من متغير البيئة NO_COLOR
والخيار -m
.
يقوم معظم المحللين بتحميل جميع البيانات من STDIN
، وتحليلها، ثم إخراج مستند JSON بأكمله بشكل تسلسلي. هناك بعض المحللين الدفقيين (مثل ls-s
و ping-s
) الذين يبدأون على الفور في معالجة وإخراج البيانات سطرًا تلو الآخر كخطوط JSON (المعروفة أيضًا باسم NDJSON) أثناء استلامها من STDIN
. يمكن أن يؤدي ذلك إلى تقليل مقدار الذاكرة المطلوبة لتحليل كميات كبيرة من مخرجات الأوامر بشكل كبير (على سبيل المثال ls -lR /
) ويمكنه في بعض الأحيان معالجة البيانات بسرعة أكبر. يمتلك الموزعون المتدفقون سلوكًا مختلفًا قليلاً عن الموزعين القياسيين كما هو موضح أدناه.
ملاحظة: لا يمكن استخدام موزعي الدفق مع بناء الجملة "السحري".
قد ترغب في تجاهل أخطاء التحليل عند استخدام موزعي الدفق نظرًا لأنه قد يتم استخدامها في خطوط أنابيب المعالجة طويلة العمر ويمكن أن تؤدي الأخطاء إلى كسر الأنبوب. لتجاهل أخطاء التحليل، استخدم الخيار -qq
cli أو الوسيطة ignore_exceptions=True
مع الدالة parse()
. سيؤدي هذا إلى إضافة كائن _jc_meta
إلى مخرجات JSON مع سمة success
. إذا كان success
true
، فلن تكون هناك مشكلات في تحليل السطر. إذا كانت success
false
، فهذا يعني أنه تم العثور على مشكلة في التحليل وستتم إضافة حقلي error
line
لتضمين وصف قصير للخطأ ومحتويات السطر غير القابل للتحليل، على التوالي:
تم تحليل السطر بنجاح مع خيار -qq
:
{
"command_data" : " data " ,
"_jc_meta" : {
"success" : true
}
}
تم تحليل السطر مع خيار -qq
بشكل غير ناجح:
{
"_jc_meta" : {
"success" : false ,
"error" : " error message " ,
"line" : " original line data "
}
}
تقوم معظم أنظمة التشغيل بتخزين المخرجات التي يتم نقلها من عملية إلى أخرى. يبلغ حجم المخزن المؤقت عادة حوالي 4 كيلو بايت. عند عرض المخرجات في الجهاز، لا يتم تشغيل المخزن المؤقت لنظام التشغيل لذلك يتم عرض المخرجات على الفور على الشاشة. عند توصيل عمليات متعددة معًا، قد يبدو كما لو أن الإخراج معلق عندما تكون بيانات الإدخال بطيئة جدًا (على سبيل المثال ping
):
$ ping 1.1.1.1 | jc --ping-s | jq
وذلك لأن نظام التشغيل يستخدم المخزن المؤقت بحجم 4 كيلو بايت بين jc
و jq
في هذا المثال. لعرض البيانات على الجهاز في الوقت الفعلي، يمكنك تعطيل المخزن المؤقت باستخدام خيار -u
(unbuffer) cli:
$ ping 1.1.1.1 | jc --ping-s -u | jq
{"type":"reply","pattern":null,"timestamp":null,"bytes":"64","respons...}
{"type":"reply","pattern":null,"timestamp":null,"bytes":"64","respons...}
...
ملاحظة: يمكن أن يكون الإخراج غير المخزن مؤقتًا أبطأ بالنسبة لتدفقات البيانات الكبيرة.
يقبل المحللون المتدفقون أي كائن قابل للتكرار ويعيدون كائنًا قابلاً للتكرار مما يسمح بالمعالجة البطيئة للبيانات. يجب أن تتكرر بيانات الإدخال على أسطر بيانات السلسلة. من أمثلة بيانات الإدخال الجيدة sys.stdin
أو str.splitlines()
.
لاستخدام الكائن القابل للتكرار الذي تم إرجاعه في التعليمات البرمجية الخاصة بك، ما عليك سوى تكراره أو استخدام الدالة المضمنة التالية ():
import jc
result = jc . parse ( 'ls_s' , ls_command_output . splitlines ())
for item in result :
print ( item [ "filename" ])
يمكن وضع المكونات الإضافية للمحلل في مجلد jc/jcparsers
في "دليل بيانات التطبيق" المحلي لديك:
$HOME/.local/share/jc/jcparsers
$HOME/Library/Application Support/jc/jcparsers
$LOCALAPPDATAjcjcjcparsers
المكونات الإضافية للمحلل هي ملفات وحدة بايثون القياسية. استخدم المحلل اللغوي jc/parsers/foo.py
أو jc/parsers/foo_s.py (streaming)
كقالب وقم ببساطة بوضع ملف .py
في المجلد الفرعي jcparsers
. يمكن وضع أي تبعيات في مجلد jc
أعلى jcparsers
ويمكن استيرادها في كود المحلل اللغوي.
يجب أن تكون أسماء ملفات المكونات الإضافية للمحلل أسماء صالحة لوحدات بايثون، وبالتالي يجب أن تبدأ بحرف وتتكون بالكامل من حروف أبجدية رقمية وشرطات سفلية. قد تتجاوز المكونات الإضافية المحلية المحللين الافتراضيين.
ملاحظة: يتبع دليل بيانات التطبيق مواصفات دليل XDG الأساسية
للحصول على أفضل النتائج، قم بتعيين متغيرات البيئة المحلية إلى C
أو en_US.UTF-8
عن طريق تعديل المتغير LC_ALL
:
$ LC_ALL=C date | jc --date
يمكنك أيضًا تعيين المتغيرات المحلية بشكل فردي:
$ export LANG=C
$ export LC_NUMERIC=C
في بعض الأنظمة القديمة، سيتم خفض مستوى إخراج UTF-8 إلى ASCII مع تسلسلات الهروب \u
إذا كانت لغة C
لا تدعم تشفير UTF-8.
قام بعض المحللين بحساب حقول الطابع الزمني للعصر المضافة إلى الإخراج. ما لم يكن اسم حقل الطابع الزمني يحتوي على لاحقة _utc
فإنه يعتبر ساذجًا. (أي بناءً على المنطقة الزمنية المحلية للنظام الذي تم تشغيل محلل jc
عليه).
إذا كان من الممكن اكتشاف منطقة زمنية UTC في نص إخراج الأمر، فسيكون الطابع الزمني على علم بالمنطقة الزمنية وسيحتوي على لاحقة _utc
على اسم المفتاح. (على سبيل المثال، epoch_utc
) لا توجد مناطق زمنية أخرى مدعومة للطوابع الزمنية الواعية.
يمكن استخدام jc
في معظم أنواع الصدفة. تحتوي بعض الأصداف الحديثة على إمكانات إلغاء تسلسل وتصفية JSON مدمجة مما يجعل استخدام jc
أكثر ملاءمة.
على سبيل المثال، ما يلي ممكن في NGS (الجيل القادم من Shell):
myvar = ` ` jc dig www.google.com ` ` [0].answer[0].data
يؤدي ذلك إلى تشغيل jc
، وتحليل مخرجات JSON، وتعيين بنية البيانات الناتجة إلى متغير في سطر واحد من التعليمات البرمجية.
لمزيد من الأمثلة حول كيفية استخدام jc
في الأصداف الأخرى، راجع صفحة wiki هذه.
بعض المحللين مثل dig
xml
و csv
وما إلى ذلك سيعملون على أي نظام أساسي. سيقوم المحللون الآخرون الذين يقومون بتحويل المخرجات الخاصة بالنظام الأساسي بإنشاء رسالة تحذير إذا تم تشغيلهم على نظام أساسي غير مدعوم. لرؤية جميع معلومات المحلل اللغوي، بما في ذلك التوافق، قم بتشغيل jc -ap
.
لا يزال بإمكانك استخدام المحلل اللغوي على نظام أساسي غير مدعوم - على سبيل المثال، قد ترغب في تحليل ملف بمخرجات linux lsof
على جهاز كمبيوتر محمول يعمل بنظام التشغيل macOS أو Windows. في هذه الحالة، يمكنك منع رسالة التحذير باستخدام الخيار -q
cli أو معلمة الدالة quiet=True
في parse()
:
ماك:
cat lsof.out | jc -q --lsof
أو ويندوز:
type lsof.out | jc -q --lsof
تم اختباره على:
لا تتردد في إضافة/تحسين التعليمات البرمجية أو الموزعين! يمكنك استخدام jc/parsers/foo.py
أو jc/parsers/foo_s.py (streaming)
كقالب وإرسال المحلل اللغوي الخاص بك مع طلب سحب.
يرجى الاطلاع على إرشادات المساهمة لمزيد من المعلومات.
ifconfig-parser
بواسطة KnightWhoSayNixmltodict
بواسطة Martín Blechruamel.yaml
لأنتون فان دير نيوتtrparse
بواسطة لويس بينيتيز فيما يلي بعض الأمثلة على إخراج jc
. لمزيد من الأمثلة، راجع هنا أو وثائق المحلل اللغوي.
arp | jc -p --arp # or: jc -p arp
[
{
"address" : " gateway " ,
"hwtype" : " ether " ,
"hwaddress" : " 00:50:56:f7:4a:fc " ,
"flags_mask" : " C " ,
"iface" : " ens33 "
},
{
"address" : " 192.168.71.1 " ,
"hwtype" : " ether " ,
"hwaddress" : " 00:50:56:c0:00:08 " ,
"flags_mask" : " C " ,
"iface" : " ens33 "
},
{
"address" : " 192.168.71.254 " ,
"hwtype" : " ether " ,
"hwaddress" : " 00:50:56:fe:7a:b4 " ,
"flags_mask" : " C " ,
"iface" : " ens33 "
}
]
cat homes.csv
"Sell", "List", "Living", "Rooms", "Beds", "Baths", "Age", "Acres", "Taxes"
142, 160, 28, 10, 5, 3, 60, 0.28, 3167
175, 180, 18, 8, 4, 1, 12, 0.43, 4033
129, 132, 13, 6, 3, 1, 41, 0.33, 1471
...
cat homes.csv | jc -p --csv
[
{
"Sell" : " 142 " ,
"List" : " 160 " ,
"Living" : " 28 " ,
"Rooms" : " 10 " ,
"Beds" : " 5 " ,
"Baths" : " 3 " ,
"Age" : " 60 " ,
"Acres" : " 0.28 " ,
"Taxes" : " 3167 "
},
{
"Sell" : " 175 " ,
"List" : " 180 " ,
"Living" : " 18 " ,
"Rooms" : " 8 " ,
"Beds" : " 4 " ,
"Baths" : " 1 " ,
"Age" : " 12 " ,
"Acres" : " 0.43 " ,
"Taxes" : " 4033 "
},
{
"Sell" : " 129 " ,
"List" : " 132 " ,
"Living" : " 13 " ,
"Rooms" : " 6 " ,
"Beds" : " 3 " ,
"Baths" : " 1 " ,
"Age" : " 41 " ,
"Acres" : " 0.33 " ,
"Taxes" : " 1471 "
}
]
cat /etc/hosts | jc -p --hosts
[
{
"ip" : " 127.0.0.1 " ,
"hostname" : [
" localhost "
]
},
{
"ip" : " ::1 " ,
"hostname" : [
" ip6-localhost " ,
" ip6-loopback "
]
},
{
"ip" : " fe00::0 " ,
"hostname" : [
" ip6-localnet "
]
}
]
ifconfig | jc -p --ifconfig # or: jc -p ifconfig
[
{
"name" : " ens33 " ,
"flags" : 4163 ,
"state" : [
" UP " ,
" BROADCAST " ,
" RUNNING " ,
" MULTICAST "
],
"mtu" : 1500 ,
"ipv4_addr" : " 192.168.71.137 " ,
"ipv4_mask" : " 255.255.255.0 " ,
"ipv4_bcast" : " 192.168.71.255 " ,
"ipv6_addr" : " fe80::c1cb:715d:bc3e:b8a0 " ,
"ipv6_mask" : 64 ,
"ipv6_scope" : " 0x20 " ,
"mac_addr" : " 00:0c:29:3b:58:0e " ,
"type" : " Ethernet " ,
"rx_packets" : 8061 ,
"rx_bytes" : 1514413 ,
"rx_errors" : 0 ,
"rx_dropped" : 0 ,
"rx_overruns" : 0 ,
"rx_frame" : 0 ,
"tx_packets" : 4502 ,
"tx_bytes" : 866622 ,
"tx_errors" : 0 ,
"tx_dropped" : 0 ,
"tx_overruns" : 0 ,
"tx_carrier" : 0 ,
"tx_collisions" : 0 ,
"metric" : null
}
]
cat example.ini
foo = fiz
bar = buz
[section1]
fruit = apple
color = blue
[section2]
fruit = pear
color = green
cat example.ini | jc -p --ini
{
"foo" : " fiz " ,
"bar" : " buz " ,
"section1" : {
"fruit" : " apple " ,
"color" : " blue "
},
"section2" : {
"fruit" : " pear " ,
"color" : " green "
}
}
$ ls -l /usr/bin | jc -p --ls # or: jc -p ls -l /usr/bin
[
{
"filename" : " apropos " ,
"link_to" : " whatis " ,
"flags" : " lrwxrwxrwx. " ,
"links" : 1 ,
"owner" : " root " ,
"group" : " root " ,
"size" : 6 ,
"date" : " Aug 15 10:53 "
},
{
"filename" : " ar " ,
"flags" : " -rwxr-xr-x. " ,
"links" : 1 ,
"owner" : " root " ,
"group" : " root " ,
"size" : 62744 ,
"date" : " Aug 8 16:14 "
},
{
"filename" : " arch " ,
"flags" : " -rwxr-xr-x. " ,
"links" : 1 ,
"owner" : " root " ,
"group" : " root " ,
"size" : 33080 ,
"date" : " Aug 19 23:25 "
}
]
netstat -apee | jc -p --netstat # or: jc -p netstat -apee
[
{
"proto" : " tcp " ,
"recv_q" : 0 ,
"send_q" : 0 ,
"local_address" : " localhost " ,
"foreign_address" : " 0.0.0.0 " ,
"state" : " LISTEN " ,
"user" : " systemd-resolve " ,
"inode" : 26958 ,
"program_name" : " systemd-resolve " ,
"kind" : " network " ,
"pid" : 887 ,
"local_port" : " domain " ,
"foreign_port" : " * " ,
"transport_protocol" : " tcp " ,
"network_protocol" : " ipv4 "
},
{
"proto" : " tcp6 " ,
"recv_q" : 0 ,
"send_q" : 0 ,
"local_address" : " [::] " ,
"foreign_address" : " [::] " ,
"state" : " LISTEN " ,
"user" : " root " ,
"inode" : 30510 ,
"program_name" : " sshd " ,
"kind" : " network " ,
"pid" : 1186 ,
"local_port" : " ssh " ,
"foreign_port" : " * " ,
"transport_protocol" : " tcp " ,
"network_protocol" : " ipv6 "
},
{
"proto" : " udp " ,
"recv_q" : 0 ,
"send_q" : 0 ,
"local_address" : " localhost " ,
"foreign_address" : " 0.0.0.0 " ,
"state" : null ,
"user" : " systemd-resolve " ,
"inode" : 26957 ,
"program_name" : " systemd-resolve " ,
"kind" : " network " ,
"pid" : 887 ,
"local_port" : " domain " ,
"foreign_port" : " * " ,
"transport_protocol" : " udp " ,
"network_protocol" : " ipv4 "
},
{
"proto" : " raw6 " ,
"recv_q" : 0 ,
"send_q" : 0 ,
"local_address" : " [::] " ,
"foreign_address" : " [::] " ,
"state" : " 7 " ,
"user" : " systemd-network " ,
"inode" : 27001 ,
"program_name" : " systemd-network " ,
"kind" : " network " ,
"pid" : 867 ,
"local_port" : " ipv6-icmp " ,
"foreign_port" : " * " ,
"transport_protocol" : null ,
"network_protocol" : " ipv6 "
},
{
"proto" : " unix " ,
"refcnt" : 2 ,
"flags" : null ,
"type" : " DGRAM " ,
"state" : null ,
"inode" : 33322 ,
"program_name" : " systemd " ,
"path" : " /run/user/1000/systemd/notify " ,
"kind" : " socket " ,
"pid" : 1607
}
]
cat /etc/passwd | jc -p --passwd
[
{
"username" : " root " ,
"password" : " * " ,
"uid" : 0 ,
"gid" : 0 ,
"comment" : " System Administrator " ,
"home" : " /var/root " ,
"shell" : " /bin/sh "
},
{
"username" : " daemon " ,
"password" : " * " ,
"uid" : 1 ,
"gid" : 1 ,
"comment" : " System Services " ,
"home" : " /var/root " ,
"shell" : " /usr/bin/false "
}
]
ping 8.8.8.8 -c 3 | jc -p --ping # or: jc -p ping 8.8.8.8 -c 3
{
"destination_ip" : " 8.8.8.8 " ,
"data_bytes" : 56 ,
"pattern" : null ,
"destination" : " 8.8.8.8 " ,
"packets_transmitted" : 3 ,
"packets_received" : 3 ,
"packet_loss_percent" : 0.0 ,
"duplicates" : 0 ,
"time_ms" : 2005.0 ,
"round_trip_ms_min" : 23.835 ,
"round_trip_ms_avg" : 30.46 ,
"round_trip_ms_max" : 34.838 ,
"round_trip_ms_stddev" : 4.766 ,
"responses" : [
{
"type" : " reply " ,
"timestamp" : null ,
"bytes" : 64 ,
"response_ip" : " 8.8.8.8 " ,
"icmp_seq" : 1 ,
"ttl" : 118 ,
"time_ms" : 23.8 ,
"duplicate" : false
},
{
"type" : " reply " ,
"timestamp" : null ,
"bytes" : 64 ,
"response_ip" : " 8.8.8.8 " ,
"icmp_seq" : 2 ,
"ttl" : 118 ,
"time_ms" : 34.8 ,
"duplicate" : false
},
{
"type" : " reply " ,
"timestamp" : null ,
"bytes" : 64 ,
"response_ip" : " 8.8.8.8 " ,
"icmp_seq" : 3 ,
"ttl" : 118 ,
"time_ms" : 32.7 ,
"duplicate" : false
}
]
}
ps axu | jc -p --ps # or: jc -p ps axu
[
{
"user" : " root " ,
"pid" : 1 ,
"cpu_percent" : 0.0 ,
"mem_percent" : 0.1 ,
"vsz" : 128072 ,
"rss" : 6784 ,
"tty" : null ,
"stat" : " Ss " ,
"start" : " Nov09 " ,
"time" : " 0:08 " ,
"command" : " /usr/lib/systemd/systemd --switched-root --system --deseria... "
},
{
"user" : " root " ,
"pid" : 2 ,
"cpu_percent" : 0.0 ,
"mem_percent" : 0.0 ,
"vsz" : 0 ,
"rss" : 0 ,
"tty" : null ,
"stat" : " S " ,
"start" : " Nov09 " ,
"time" : " 0:00 " ,
"command" : " [kthreadd] "
},
{
"user" : " root " ,
"pid" : 4 ,
"cpu_percent" : 0.0 ,
"mem_percent" : 0.0 ,
"vsz" : 0 ,
"rss" : 0 ,
"tty" : null ,
"stat" : " S< " ,
"start" : " Nov09 " ,
"time" : " 0:00 " ,
"command" : " [kworker/0:0H] "
}
]
traceroute -m 2 8.8.8.8 | jc -p --traceroute
# or: jc -p traceroute -m 2 8.8.8.8
{
"destination_ip" : " 8.8.8.8 " ,
"destination_name" : " 8.8.8.8 " ,
"hops" : [
{
"hop" : 1 ,
"probes" : [
{
"annotation" : null ,
"asn" : null ,
"ip" : " 192.168.1.254 " ,
"name" : " dsldevice.local.net " ,
"rtt" : 6.616
},
{
"annotation" : null ,
"asn" : null ,
"ip" : " 192.168.1.254 " ,
"name" : " dsldevice.local.net " ,
"rtt" : 6.413
},
{
"annotation" : null ,
"asn" : null ,
"ip" : " 192.168.1.254 " ,
"name" : " dsldevice.local.net " ,
"rtt" : 6.308
}
]
},
{
"hop" : 2 ,
"probes" : [
{
"annotation" : null ,
"asn" : null ,
"ip" : " 76.220.24.1 " ,
"name" : " 76-220-24-1.lightspeed.sntcca.sbcglobal.net " ,
"rtt" : 29.367
},
{
"annotation" : null ,
"asn" : null ,
"ip" : " 76.220.24.1 " ,
"name" : " 76-220-24-1.lightspeed.sntcca.sbcglobal.net " ,
"rtt" : 40.197
},
{
"annotation" : null ,
"asn" : null ,
"ip" : " 76.220.24.1 " ,
"name" : " 76-220-24-1.lightspeed.sntcca.sbcglobal.net " ,
"rtt" : 29.162
}
]
}
]
}
uptime | jc -p --uptime # or: jc -p uptime
{
"time" : " 11:35 " ,
"uptime" : " 3 days, 4:03 " ,
"users" : 5 ,
"load_1m" : 1.88 ,
"load_5m" : 2.0 ,
"load_15m" : 1.94 ,
"time_hour" : 11 ,
"time_minute" : 35 ,
"time_second" : null ,
"uptime_days" : 3 ,
"uptime_hours" : 4 ,
"uptime_minutes" : 3 ,
"uptime_total_seconds" : 273780
}
cat cd_catalog.xml
xml version = " 1.0 " encoding = " UTF-8 " ?> < CATALOG > < CD > < TITLE >Empire Burlesque TITLE > < ARTIST >Bob Dylan ARTIST > < COUNTRY >USA COUNTRY > < COMPANY >Columbia COMPANY > < PRICE >10.90 PRICE > < YEAR >1985 YEAR > CD > < CD > < TITLE >Hide your heart TITLE > < ARTIST >Bonnie Tyler ARTIST > < COUNTRY >UK COUNTRY > < COMPANY >CBS Records COMPANY > < PRICE >9.90 PRICE > < YEAR >1988 YEAR > CD > ...
cat cd_catalog.xml | jc -p --xml
{
"CATALOG" : {
"CD" : [
{
"TITLE" : " Empire Burlesque " ,
"ARTIST" : " Bob Dylan " ,
"COUNTRY" : " USA " ,
"COMPANY" : " Columbia " ,
"PRICE" : " 10.90 " ,
"YEAR" : " 1985 "
},
{
"TITLE" : " Hide your heart " ,
"ARTIST" : " Bonnie Tyler " ,
"COUNTRY" : " UK " ,
"COMPANY" : " CBS Records " ,
"PRICE" : " 9.90 " ,
"YEAR" : " 1988 "
}
]
}
}
cat istio.yaml
apiVersion : " authentication.istio.io/v1alpha1 "
kind : " Policy "
metadata :
name : " default "
namespace : " default "
spec :
peers :
- mtls : {}
---
apiVersion : " networking.istio.io/v1alpha3 "
kind : " DestinationRule "
metadata :
name : " default "
namespace : " default "
spec :
host : " *.default.svc.cluster.local "
trafficPolicy :
tls :
mode : ISTIO_MUTUAL
cat istio.yaml | jc -p --yaml
[
{
"apiVersion" : " authentication.istio.io/v1alpha1 " ,
"kind" : " Policy " ,
"metadata" : {
"name" : " default " ,
"namespace" : " default "
},
"spec" : {
"peers" : [
{
"mtls" : {}
}
]
}
},
{
"apiVersion" : " networking.istio.io/v1alpha3 " ,
"kind" : " DestinationRule " ,
"metadata" : {
"name" : " default " ,
"namespace" : " default "
},
"spec" : {
"host" : " *.default.svc.cluster.local " ,
"trafficPolicy" : {
"tls" : {
"mode" : " ISTIO_MUTUAL "
}
}
}
}
]
© 2019-2024 كيلي البرازيل