আমি প্রতিস্থাপন নিম্নলিখিত কোড চেষ্টা QQ সঙ্গে ZZ, তবে এটি আমি যা চাই তা করে না:
var1=QQsed -i 's/$var1/ZZ/g' $fileযাইহোক, এই কোডটি আমি যা চাই তা করে:
sed -i 's/QQ/ZZ/g' $fileআমি কীভাবে ভেরিয়েবলগুলি ব্যবহার করব sed?
আমি প্রতিস্থাপন নিম্নলিখিত কোড চেষ্টা QQ সঙ্গে ZZ, তবে এটি আমি যা চাই তা করে না:
var1=QQsed -i 's/$var1/ZZ/g' $fileযাইহোক, এই কোডটি আমি যা চাই তা করে:
sed -i 's/QQ/ZZ/g' $fileআমি কীভাবে ভেরিয়েবলগুলি ব্যবহার করব sed?
শেল ভেরিয়েবল বিস্তৃত জন্য দায়ী. আপনি স্ট্রিং জন্য একক উদ্ধৃতি ব্যবহার করার সময়, তার বিষয়বস্তু আক্ষরিক চিকিত্সা করা হবে, তাই sed এখন আক্ষরিক প্রতিটি ঘটনা প্রতিস্থাপন করার চেষ্টা করে $var1 দ্বারা ZZ.
হোয়াইটস্পেস সংরক্ষণের সময় শেলটি ভেরিয়েবলগুলি প্রসারিত করতে ডাবল উদ্ধৃতি ব্যবহার করুন:
sed -i "s/$var1/ZZ/g" "$file"আপনি প্রতিস্থাপন স্ট্রিং উদ্ধৃতি অক্ষর প্রয়োজন হলে, আপনি শেল দ্বারা ব্যাখ্যা করা হবে, যা একটি ব্যাকস্ল্যাশ সঙ্গে এটি পূর্বে আছে. নিম্নলিখিত উদাহরণে, স্ট্রিং quote me দ্বারা প্রতিস্থাপন করা হবে "quote me" (চরিত্র & দ্বারা ব্যাখ্যা করা হয় sed):
sed -i "s/quote me/\"&\"/" "$file"আপনার যদি অনেক শেল মেটা-অক্ষর থাকে তবে প্যাটার্নের জন্য একক উদ্ধৃতি এবং ভেরিয়েবলের জন্য ডাবল উদ্ধৃতি ব্যবহার করার বিষয়টি বিবেচনা করুন:
sed -i 's,'"$pattern"',Say hurrah to &: \0/,' "$file"আমি কীভাবে ব্যবহার করি তা লক্ষ্য করুন s,pattern,replacement, পরিবর্তে s/pattern/replacement/, আমি এর সাথে হস্তক্ষেপ এড়াতে এটি করেছি / মধ্যে \0/.
শেল তারপর উপরের কমান্ড চালায় sed পরবর্তী যুক্তি দিয়ে (ধরে নেওয়া pattern=bert এবং file=text.txt):
-is,bert,Say hurrah to &: \0/,text.txtযদি file.txt ধারন করে bert, আউটপুট হবে:
Say hurrah to bert: \0/
আমরা ভেরিয়েবল ব্যবহার করতে পারি sed ডাবল কোট ব্যবহার করে:
sed -i "s/$var/r_str/g" file_nameআপনার যদি স্ল্যাশ থাকে / পরিবর্তনশীল তারপর নীচের মত বিভিন্ন বিভাজক ব্যবহার করুন:
sed -i "s|$var|r_str|g" file_name
প্রসারিত করতে (শ্লেষ উদ্দেশ্যে) চালু @ মানির উত্তর,
perl
| আপনার ভেরিয়েবলের মানেও উপস্থিত হতে পারে, তাই অন্যান্য ডিলিমিটার চেষ্টা করতে ভয় পাবেন নাদেখুন [আপনার এই পোস্টে আমার উত্তর] (bash - How to escape file path in SED? - Ask Ubuntu)