(এখানে এবং যথাক্রমে) sকমান্ডের বাম দিকে এবং ডানদিকে ব্যবহার করার জন্য ভেরিয়েবলগুলি এড়ানোর জন্য , আপনি:sed$lhs$rhs
escaped_lhs=$(printf '%s\n' "$lhs" | sed 's:[][\/.^$*]:\\&:g')
escaped_rhs=$(printf '%s\n' "$rhs" | sed 's:[\/&]:\\&:g;$!s/$/\\/')
sed "s/$escaped_lhs/$escaped_rhs/"
মনে রাখবেন যে $lhsএকটি নতুন লাইন অক্ষর থাকতে পারে না।
অর্থাৎ, এলএইচএসে, সমস্ত রেজিপ্সেপ অপারেটরগুলি ( ][.^$*), পালিয়ে যাওয়া চরিত্র নিজেই ( \) এবং বিভাজক ( /) এড়িয়ে চলুন ।
আরএইচএসে আপনাকে কেবল পালাতে হবে &, বিভাজক, ব্যাকস্ল্যাশ এবং নিউলাইন চরিত্রটি (যা আপনি সর্বশেষটি ( $!s/$/\\/) বাদে প্রতিটি লাইনের শেষে একটি ব্যাকস্ল্যাশ সন্নিবেশ করিয়েছেন )।
যা আপনি ব্যবহার অনুমান /আপনার একটি বিভাজক হিসেবে sed sকমান্ড এবং আপনি সক্ষম করবেন না যে এক্সটেন্ডেড মাঝামাঝি সঙ্গে -r(গনুহ sed/ ssed/ ast/ busybox sed) অথবা -E(BSD গুলোর, astসাম্প্রতিক গনুহ, সাম্প্রতিক, busybox) অথবা PCREs সঙ্গে -R( ssed) অথবা বৃদ্ধি মাঝামাঝি সঙ্গে -A/ -X( ast) যা সবার অতিরিক্ত আরআর অপারেটর রয়েছে।
যথেচ্ছ ডেটা নিয়ে কাজ করার সময় কয়েকটি স্থল নিয়ম:
- ব্যবহার করবেন না
echo
- আপনার পরিবর্তনশীল উদ্ধৃতি
- লোকেলের প্রভাব বিবেচনা করুন (বিশেষত এর চরিত্রের সেট: উদাহরণস্বরূপ পলায়নকারী স্ট্রিংগুলি (এবং একই কমান্ডের সাহায্যে) কমান্ডের মতো একই লোকেলে পালানো
sed কমান্ডগুলি চালানো গুরুত্বপূর্ণ )sedsed
- নতুন লাইন চরিত্রটি সম্পর্কে ভুলবেন না (এখানে আপনি
$lhsকোনও রয়েছে কিনা তা পরীক্ষা করে নিতে এবং পদক্ষেপ নিতে চাইতে পারেন)।
আর একটি বিকল্প হ'ল পরিবেশে স্ট্রিংগুলির perlপরিবর্তে ব্যবহার sedএবং পাস করা এবং আক্ষরিকভাবে স্ট্রিং নেওয়ার জন্য \Q/ \E perlregexp অপারেটরগুলি ব্যবহার করা:
A="$lhs" B="$rhs" perl -pe 's/\Q$ENV{A}\E/$ENV{B}/g'
perl(ডিফল্টরূপে) লোকালের চরিত্রটি দ্বারা প্রভাবিত হবে না উপরের হিসাবে, এটি কেবল স্ট্রিংগুলিকে বাইটের অ্যারে হিসাবে বিবেচনা করে না তারা কোন অক্ষর (যদি থাকে) সেগুলি ব্যবহারকারীর জন্য উপস্থাপন করতে পারে about সঙ্গে sed, আপনি লোকেল ফিক্সিং একই অর্জন করতে পারে Cসঙ্গে LC_ALL=Cসব জন্য sedকমান্ড (যদিও যে যদি থাকে, ত্রুটি বার্তা ভাষা প্রভাবিত করবে)।