ইতিমধ্যে উদ্ধৃতি দ্বারা পরিবেষ্টিত সেড এক্সপ্রেশনটিতে একটি একক উদ্ধৃতি থেকে কীভাবে বাঁচবেন?
উদাহরণ স্বরূপ:
sed 's/ones/one's/' <<< 'ones thing'
ইতিমধ্যে উদ্ধৃতি দ্বারা পরিবেষ্টিত সেড এক্সপ্রেশনটিতে একটি একক উদ্ধৃতি থেকে কীভাবে বাঁচবেন?
উদাহরণ স্বরূপ:
sed 's/ones/one's/' <<< 'ones thing'
উত্তর:
sed
ডাবল উদ্ধৃতি সহ উদ্ধৃতি কোড:
$ sed "s/ones/one's/"<<<"ones thing"
one's thing
আমি কয়েকশো ব্যাকস্ল্যাশ সহ কোড অবলম্বন পছন্দ করি না - আমার চোখে কষ্ট দেয়। সাধারণত আমি এইভাবে করি:
$ sed 's/ones/one\x27s/'<<<"ones thing"
one's thing
sed -i
কোনও বিশেষ কারণে কাজ করছে বলে মনে হচ্ছে না ?
একটি কৌশল হ'ল সংলগ্ন স্ট্রিংগুলির শেল স্ট্রিং কনটেনটেশন ব্যবহার করা এবং শেল এস্কেপিং ব্যবহার করে এম্বেড করা উদ্ধৃতিটি এড়ানো:
sed 's/ones/two'\''s/' <<< 'ones thing'
two's thing
সেড এক্সপ্রেশনটিতে 3 টি স্ট্রিং রয়েছে, যা শেলটি পরে এক সাথে সেলাই করে:
sed 's/ones/two'
\'
's/'
আশা করি যে অন্য কাউকে সাহায্য করবে!
sed 's/ones/two''s/' <<< 'ones thing'
না, আউটপুটস twos thing
। এটি '
আউটপুটটিতে অনুপস্থিত । এই উত্তরে বর্ণিত পদ্ধতিতে আপনাকে এটি করতে হবে।
সবচেয়ে ভাল উপায়টি ব্যবহার করা $'some string with \' quotes \''
যেমন:
sed $'s/ones/two\'s/' <<< 'ones thing'
$'string'
ব্যাশ-নির্দিষ্ট, সুতরাং এটি পসিক্স শেলের কাছে পোর্টেবল নয়।
bash
নির্দিষ্ট নয় । এটিতে ksh
এবং পাওয়া যায় zsh
, তবে হ্যাঁ, এটি পসিক্সের একটি এক্সটেনশন যা আপনি পোর্টেবল স্ক্রিপ্ট না লিখলে ভাল। একমাত্র নেতিবাচকতাটি হ'ল আপনি যে কোনও অন্যান্য ব্যাকস্ল্যাশগুলি পাশাপাশি ব্যবহার করতে পারেন escape
সেড কমান্ডের বাইরের অংশে কেবল ডাবল উদ্ধৃতি ব্যবহার করুন।
$ sed "s/ones/one's/" <<< 'ones thing'
one's thing
এটি ফাইলগুলির সাথেও কাজ করে।
$ echo 'ones thing' > testfile
$ sed -i "s/ones/one's/" testfile
$ cat testfile
one's thing
আপনার যদি স্ট্রিংয়ের ভিতরে একক এবং ডাবল উক্তি থাকে তবে তাও ঠিক। শুধু ডাবল উদ্ধৃতি এড়ানো।
উদাহরণস্বরূপ, এই ফাইলটিতে উভয় একক এবং ডাবল উদ্ধৃতি সহ একটি স্ট্রিং রয়েছে। আমি একটি একক উক্তি যুক্ত করতে এবং কিছু ডাবল উদ্ধৃতি মুছে ফেলার জন্য ব্যবহার করব।
$ cat testfile
"it's more than ones thing"
$ sed -i "s/\"it's more than ones thing\"/it's more than one's thing/" testfile
$ cat testfile
it's more than one's thing
এই কিম্ভুতকিমাকার ধরনের কিন্তু আমি পাই নি \'
মধ্যে sed 's/ones/one\'s/'
কাজ করতে। আমি শেল স্ক্রিপ্টটি তৈরি করতে এটির সন্ধান import 'hammerjs';
করছিলাম src/main.ts
যা কৌনিক সহ আমার ফাইলটিতে স্বয়ংক্রিয়ভাবে যুক্ত হবে ।
আমি কাজে যা পেয়েছি তা হ'ল:
apost=\'
sed -i '' '/environments/a\
import '$apost'hammerjs'$apost';' src/main.ts
সুতরাং উপরের উদাহরণের জন্য, এটি হবে:
apost=\'
sed 's/ones/one'$apost's/'
কেন \'
নিজে থেকে কাজ করবে না আমার কোনও ধারণা নেই , তবে এটি রয়েছে।
আমি জানি এটি একটি কপির মতো শোনা যাচ্ছে তবে আমি যখন কখনও স্ট্রিংয়ের মধ্যে একক এবং ডাবল উদ্ধৃতি থাকতাম তখন আমি কখনও কাজ করতে পারি না। আমার মতো যে কোনও নবজাতককে সমস্যা হচ্ছে তাদের সহায়তা করার জন্য একটি বিকল্প হ'ল স্ট্রিংটি বিভক্ত করা। আমাকে 100 এরও বেশি ইনডেক্স। Hmtl ফাইলে কোড প্রতিস্থাপন করতে হয়েছিল। স্ট্রিংগুলির উভয়ই একক এবং ডাবল উদ্ধৃতি ছিল তাই আমি কেবল স্ট্রিংটি বিভক্ত করেছি এবং প্রথম ব্লকটি <!--
এবং দ্বিতীয় ব্লকের সাথে প্রতিস্থাপন
করেছি -->
। এটি আমার সূচক html ফাইলগুলিতে গোলমাল করেছে তবে এটি কার্যকর হয়েছে।
বিভিন্ন স্ল্যাশগুলির সাথে বিভ্রান্তি এড়াতে বিকল্প স্ট্রিং সেপ্রেটার ব্যবহার করুন ":"
sed "s:ones:one's:" <<< 'ones thing'
অথবা আপনি যদি একক উদ্ধৃতিটি হাইলাইট করতে চান
sed "s:ones:one\'s:" <<< 'ones thing'
উভয় ফিরে
one's thing