শেল পাইপলাইনে কীভাবে `jq` ব্যবহার করবেন?


194

আমি jqশেল পাইপলাইনে "স্বাভাবিকভাবে" আচরণ করব বলে মনে হচ্ছে না । উদাহরণ স্বরূপ:

$ curl -s https://api.github.com/users/octocat/repos | jq | cat

jqএটির সাহায্যের পাঠ্যটি কেবল মুদ্রণের ফলাফল । যদি আমি jqকোনও ফাইলের আউটপুট পুনর্নির্দেশের চেষ্টা করি তবে একই জিনিস ঘটে :

$ curl -s https://api.github.com/users/octocat/repos | jq > /tmp/stuff.json

হয় jqইচ্ছাকৃতভাবে বেইল আউট যদি এটা নির্ধারণ করে যে এটি একটি TTY থেকে চালানো না হচ্ছে? আমি কীভাবে এই আচরণটি আটকাতে পারি যাতে আমি jqপাইপলাইনে ব্যবহার করতে পারি ?


* (আমি বুঝতে পারি যে এই উদাহরণে বিড়ালের অকেজো ব্যবহার রয়েছে ; এটি কেবল উদাহরণের জন্য)

উত্তর:


322

একটি যুক্তি হিসাবে আপনাকে একটি ফিল্টার সরবরাহ করতে হবে। jqডিফল্টরূপে প্রিন্টিং প্রিন্টিং সরবরাহ ব্যতীত অপরিবর্তিতভাবে JSON পাশ করতে, পরিচয় ফিল্টারটি ব্যবহার করুন .:

curl -s https://api.github.com/users/octocat/repos | jq '.' | cat

23
ওপি থাকার কারণে আমি এটি রেখে দিয়েছি; আমি ধরে নিলাম এটি কেবলমাত্র একটি স্থানধারককে নির্দেশ করতে পারে যে jqএটি দুটি পাইপ থেকে পড়া এবং অন্য পাইপে লেখা writing যদি ইচ্ছাটি কেবল আউটপুট দেখতে হয় jqতবে তা catনিজেই অপ্রয়োজনীয়।
চিপনার

3
(1) জকিউ সংস্করণ 1.5 বৃদ্ধি করা হয়েছে যাতে। যেমন ক্ষেত্রে অপ্রয়োজনীয়। (২) "" উদ্ধৃতি দেওয়ার দরকার নেই।
শিখর

6
@ পাইক এটি পাইপলাইনের জন্য প্রয়োজনীয় নাও হতে পারে তবে আমার 1.5 আছে এবং "সরবরাহ করতে হয়েছিল"। আউটপুট একটি ফাইলে পুনর্নির্দেশ করতে।
MHarris

2
আমি তাঁকে উদ্ধৃত করছি ., অভ্যাসের বাইরে থেকে আমার প্রমাণ অভ্যাস প্রথম মত তাদেরকে JSON সৌন্দর্য দেখতে, তারপর ফিরে যান এবং ফিল্টার, যা প্রায়ই আরো বেশী না উদ্ধৃত করা প্রয়োজন হবে জোড়া শুরু হয়।
চিপনার

6
@ ওয়াল্টারট্রস হ্যাঁ, এবং আমি কেন 18 মাস আগে একটি মন্তব্যে ব্যাখ্যা করেছি।
চিপনার

15

একটি ব্যবহারের ক্ষেত্রে আমি নিজেকে প্রায়শই ঘন ঘন কাজ করে দেখতে পেয়েছি হ'ল "আমি অন্যান্য শেল কমান্ডগুলিতে সরবরাহের জন্য জেএসএন ডেটা কীভাবে তৈরি করব curl?" আমি এটি করার --null-input/-nউপায়টি বিকল্পটি ব্যবহার করে :

কোনও ইনপুট মোটেও পড়বেন না! পরিবর্তে, ফিল্টার একবার nullইনপুট হিসাবে ব্যবহার করা হয়। jqসাধারণ ক্যালকুলেটর হিসাবে ব্যবহার করতে বা স্ক্র্যাচ থেকে জেএসএন ডেটা তৈরি করার জন্য এটি দরকারী ।

এবং এটিতে উত্তীর্ণ একটি উদাহরণ curl:

jq -n '{key: "value"}' | curl -d @- \
  --url 'https://some.url.com' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json'

9
এটি দুর্দান্ত, তবে নিশ্চিত নয় যে এটি এই প্রশ্নের সাথে কীভাবে প্রাসঙ্গিক?
mgalgs

2
@ মিগলস আমি খুঁজে পেলাম যে jqকোনও ডেটা ফিল্টার করার জন্য মাঝের / প্রান্তের চেয়ে শেল পাইপলাইন শুরু করার সময় আমি শেল পাইপলাইন শুরু করতে / তৈরি করতে / ব্যবহার করতে চাইছিলাম । curlউদাহরণস্বরূপ মৌলিক এক, কিন্তু আমি নিজেকে JSON তথ্য ঘন ঘন হাত টাইপিং পাওয়া curlএবং ডান মূল্য উদ্ধৃতি পেতে চেষ্টা, তাই আমি এটা পাশাপাশি অন্যদের সহায়ক হতে পারে।
এমকোবিট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.