আমি প্রতিস্থাপন করতে নিচের কোডটি চেষ্টা QQ
সঙ্গে ZZ
, কিন্তু এটা আমি কি চাই না করে না:
var1=QQ
sed -i 's/$var1/ZZ/g' $file
যাইহোক, এই কোডটি আমি যা চাই তা করে:
sed -i 's/QQ/ZZ/g' $file
আমি কীভাবে ভেরিয়েবল ব্যবহার করব sed
?
আমি প্রতিস্থাপন করতে নিচের কোডটি চেষ্টা QQ
সঙ্গে ZZ
, কিন্তু এটা আমি কি চাই না করে না:
var1=QQ
sed -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
) দিয়ে উপরের কমান্ডটি চালায় :
-i
s,bert,Say hurrah to &: \0/,
text.txt
যদি file.txt
এতে থাকে bert
তবে আউটপুটটি হবে:
Say hurrah to bert: \0/
g
বিকল্প, যাতে আপনি s,foo,bar,g
পরিবর্তে পাস করবে ।
\\0
পরিবর্তে ব্যবহার \0
করতে \0
প্ররোচিত হন তবে একক উদ্ধৃতিতে আবদ্ধ হয়ে গেলে এটি করা উচিত নয় । অন্যথায় পুরো ম্যাচের পরিবর্তে sed
আক্ষরিকের জন্য প্যাটার্নটি স্থান করে দেবে \0
।
আমরা sed
ডাবল উদ্ধৃতি ব্যবহার করে ভেরিয়েবলগুলি ব্যবহার করতে পারি :
sed -i "s/$var/r_str/g" file_name
আপনার যদি /
ভেরিয়েবলটিতে স্ল্যাশ থাকে তবে নীচের মতো বিভিন্ন বিভাজক ব্যবহার করুন:
sed -i "s|$var|r_str|g" file_name
/
থাকে => এটি আমাকে বাঁচায়! আমার পরিবর্তনশীলটি একটি ইউআরএল এবং এতে রয়েছে /
। |
বিভাজক হিসাবে ব্যবহার করতে স্যুইচ করা আমার সমস্যাটি স্থির করেছে