কেন xargs ইনপুট থেকে স্ট্রিট উদ্ধৃতি?


25

কেন xargs ইনপুট পাঠ্য থেকে উদ্ধৃতি স্ট্রিপ?

সরলীকৃত উদাহরণ এখানে:

echo "/Place/='http://www.google.com'" | xargs echo

আউটপুট

/Place/=http://www.google.com

এটিকে ঘিরে কাজ করার কোনও উপায় আছে কি? (xargs -0 আমাকে সাহায্য করে না)


1
xargsএকইরূপে কোট এবং ব্যাকস্ল্যাশ বিশেষভাবে অংশ হিসেবে বৈশিষ্টxargsপরিবর্তে আপনি যা করার চেষ্টা করছেন তা পোস্ট করুন।
jw013

3
xargs -0এখানে আমার জন্য কাজ করে ... এটি আপনাকে সাহায্য করে না কেন?
ডারোবার্ট

উত্তর:


10

xargsম্যানুয়াল থেকে :

আপনি যদি ফাঁকা বা অনুভূমিক ট্যাব ধারণ করতে কোনও ইনপুট আর্গুমেন্ট চান তবে এটিকে ডাবল উদ্ধৃতি বা অ্যাডোস্ট্রোফেজে বন্ধ করুন। যদি যুক্তিতে একটি ডাবল উদ্ধৃতি অক্ষর থাকে ( "), আপনার অবশ্যই যুক্তিটি অ্যাডাস্ট্রোফেসে আবদ্ধ করতে হবে। বিপরীতভাবে, যদি আর্গুমেন্টে একটি অ্যাডোস্ট্রোফ ( ') থাকে, আপনার অবশ্যই যুক্তিটি ডাবল উদ্ধৃতিতে আবদ্ধ করতে হবে। আপনি \অক্ষরটির সামনে একটি ব্যাকস্ল্যাশ ( ) অক্ষর রাখতে পারেন যা অক্ষরটির কোনও বিশেষ অর্থ (উদাহরণস্বরূপ, সাদা স্থানের অক্ষর, বা উদ্ধৃতি) এর কোনও বিশেষ অর্থ উপেক্ষা করতে জার্গার্সকে বলতে পারেন।

এর অর্থ যদি আপনি উদ্ধৃতিগুলি উদ্ধৃত হয় তবে:

$ echo "/Place/=\'http://www.google.com\'" | xargs echo
/Place/='http://www.google.com'

কাজ করবে কিন্তু echo /Place/=\'http://www.google.com\' | xargs echoকরবে না


1
ভোটের বিপরীতে কিছুই নয় তবে কারণ সম্পর্কে একটি মন্তব্য সাহায্য করবে :-)
মাত্তিও

3
আপনি যদি ইনপুটে পাইপ দিচ্ছেন? যদি আমার কাছে কোনও স্ক্রিপ্ট থাকে যা আউটপুট হয় তবে আমি "/Place/='http://www.google.com'"কীভাবে এটি থেকে সঠিকভাবে পালাতে পারি?
রজার ফিল্মায়ার

1
@ রোজারফিল্মির আপনার_স্ক্রিপ্ট | সমান্তরাল - শেলকোট | ...
ওলে টাঞ্জ

19

যদি আপনি চান তাহলে xargsকরতে কোট উপেক্ষা ভাল soultion অন্যতম ব্যবহার হতে পারে xargsপতাকা xargs -0

সরাসরি ম্যান পৃষ্ঠা অপশন থেকে

বিকল্প -0, - নিল

ইনপুট আইটেমগুলি সাদা স্থানের পরিবর্তে নাল অক্ষর দ্বারা সমাপ্ত করা হয়, এবং উদ্ধৃতি এবং ব্যাকস্ল্যাশ বিশেষ নয় (প্রতিটি অক্ষর আক্ষরিক অর্থে নেওয়া হয়)। ফাইল স্ট্রিংয়ের শেষটি অক্ষম করে, যা অন্য কোনও যুক্তির মতো আচরণ করা হয়। ইনপুট আইটেমগুলিতে সাদা স্থান, উদ্ধৃতি চিহ্ন, বা ব্যাকস্ল্যাশ থাকতে পারে তখন দরকারী। GNU ফাইন্ড -প্রিন্ট0 বিকল্পটি এই মোডের জন্য উপযুক্ত ইনপুট তৈরি করে।

আমি একটি জিএনইউ সিস্টেমে পরীক্ষা করে দেখেছি যে ডিলিমিটারটিকে নির্দিষ্ট মান (একটি নিউলাইনের মতো) -dবিকল্পের সাহায্যে সেট করা (এবং কেবল নয় -0) এছাড়াও xargsউদ্ধৃতি ইত্যাদিকে বিশেষভাবে গ্রহণ না করার কারণ হতে পারে:

-bash-4.3$ { echo "a'b'c"; echo d; } | xargs -d$'\n' echo
a'b'c d
-bash-4.3$ rpm -qf "$(which xargs)"
findutils-4.6.0.0.99.11a05-alt1.x86_64
-bash-4.3$ { echo "a'b'c"; echo d; } | xargs echo
abc d
-bash-4.3$ 

8

পরিবর্তে আপনি জিএনইউ সমান্তরাল ব্যবহার করতে পারেন:

$ echo "/Place/='http://www.google.com'" | parallel echo
/Place/='http://www.google.com'

তারপরে আপনার নিজের উদ্ধৃতি নিজেই করতে হবে না।

আরও জানুন: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1


7

আমি ম্যানপেজে আরেকটি সমাধান পেয়েছি: স্পষ্টভাবে ডিলিমিটারকে '\ n' হিসাবে নির্দিষ্ট করুন। এটি উদ্ধৃতিগুলির জন্য বিশেষ পরিচালনা পরিচালনা বন্ধ করে দেয়:

--ডেলিমিটার = ডিলিম, -ডি ডিলিম

ইনপুট আইটেমগুলি নির্দিষ্ট অক্ষর দ্বারা সমাপ্ত হয়। নির্দিষ্ট ডিলিমিটারটি একটি একক অক্ষর, সি-শৈলীর অক্ষর যেমন \ n, বা একটি অক্টাল বা হেক্সাডেসিমাল এস্কেপ কোড হতে পারে escape অক্টাল এবং হেক্সাডেসিমাল এস্কেপ কোডগুলি প্রিন্টফ কমান্ড হিসাবে বোঝা যায়। মাল্টিবাইট অক্ষর সমর্থিত নয়। ইনপুট প্রক্রিয়া করার সময়, উদ্ধৃতি এবং ব্যাকস্ল্যাশ বিশেষ নয়; ইনপুট প্রতিটি অক্ষর আক্ষরিক নেওয়া হয়।

সুতরাং,

echo "/Place/='http://www.google.com'" | xargs -d'\n' echo

আউটপুট

/Place/='http://www.google.com'

নোট করুন যে এটি GNU xargsবা সামঞ্জস্যপূর্ণভাবে বোঝায়
স্টাফেন চ্যাজেলাস

এছাড়াও মনে রাখবেন যে এটি স্থান এবং ট্যাবটিকে ডিলিমিটার হিসাবে স্বীকৃতি দেওয়া থেকে বিরত রাখে (সম্ভবত ওপি'র ক্ষেত্রেও সম্ভবত)।
স্টাফেন চেজেলাস

বালম্যান একটি অনুরূপ সমাধান দিয়েছেন (ভাল আসলে @ আইএমজেড ) যদিও আপনার কিছুটা ভাল এটি ksh93 $'...'প্রতিটি শেল প্রয়োগে পাওয়া যায় না এমন উদ্ধৃতি অপারেটর ব্যবহার এড়িয়ে চলে ।
স্টাফেন চেজেলাস

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