আমি কিভাবে একটি সেড কমান্ড ভেরিয়েবল ব্যবহার করব?

আমি প্রতিস্থাপন নিম্নলিখিত কোড চেষ্টা 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)

সম্পর্কিত: https://stackoverflow.com/questions/407523/escape-a-string-for-a-sed-replace-pattern