সিএসএল বাশ একটি কমান্ডের আউটপুট থেকে উদ্ধৃতি সরিয়ে ফেলুন


12

আমি এখানেjq প্রতি ব্যবহার করে একটি JSON ফাইল লোড করার চেষ্টা করছি । এটি বেশ সোজা এবং এটি কাজ করে:

$ cat ~/Downloads/json.txt | jq '.name'
"web"

তবে, আমাকে এই ভেরিয়েবলের আউটপুট একটি কমান্ডের মধ্যে বরাদ্দ করতে হবে। আমি এটি করার চেষ্টা করেছি এবং এই কাজগুলি:

$ my_json=`cat ~/Downloads/json.txt | jq '.name'`
$ myfile=~/Downloads/$my_json.txt
$ echo $myfile
/home/qut/Downloads/"web".txt

তবে আমি চাই /home/qut/Downloads/web.txt

আমি কোট, অর্থাত পরিবর্তন অপসারণ না "web"করার web?

উত্তর:


27

উদ্ধৃতিগুলি অপসারণ করতে আপনি টিআর কমান্ডটি ব্যবহার করতে পারেন :

my_json=$(cat ~/Downloads/json.txt | jq '.name' | tr -d \")

2
trকমান্ডের জন্য আপনাকে ধন্যবাদ ... আমি কাজটি পেতে 40+ চরিত্রের মেগা ওয়ান-লাইনার লিখে লোককে শত শত উপস্থাপক সহ 4 টি বিভিন্ন পোস্ট দিয়েছি। আপনার কাছে সঠিক (এবং সম্ভবত আধুনিক) সমাধান রয়েছে।
শাদোনিনজা

15

এর বিশেষ ক্ষেত্রে jq, আপনি উল্লেখ করতে পারেন যে আউটপুটটি কাঁচা বিন্যাসে হওয়া উচিত :

   --raw-output / -r:

   With this option, if the filter´s result is a string then  it  will
   be  written directly to standard output rather than being formatted
   as a JSON string with quotes. This can be useful for making jq fil‐
   ters talk to non-JSON-based systems.

আপনার লিঙ্কjson.txt থেকে নমুনা ফাইল ব্যবহার করে উদাহরণস্বরূপ :

$ jq '.name' json.txt
"Google"

যেহেতু

$ jq -r '.name' json.txt
Google

1

আপনি এটির eval echoমতো ব্যবহার করতে পারেন :

my_json=$(eval echo $(cat ~/Downloads/json.txt | jq '.name'))

তবে এটি আদর্শ নয় - সহজেই বাগ এবং / অথবা সুরক্ষা ত্রুটিগুলির কারণ হতে পারে।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.