এখানে ব্যাখ্যার দুটি স্তর রয়েছে: শেল এবং সেড।
শেলটিতে, একক উদ্ধৃতিগুলির মধ্যে থাকা সমস্ত কিছুই আক্ষরিক অর্থে ব্যাখ্যা করা হয়, কেবলমাত্র একক উদ্ধৃতিগুলি ব্যতীত। আপনার লিখিতভাবে একক উদ্ধৃতিগুলির মধ্যে কার্যকরভাবে একক উদ্ধৃতি থাকতে পারে '\''
(একক উদ্ধৃতি বন্ধ করুন, একটি আক্ষরিক একক উদ্ধৃতি, একক উদ্ধৃতি খুলুন)।
শেড বেসিক নিয়মিত এক্সপ্রেশন ব্যবহার করে । একটি বিআরইতে, তাদের সাথে আক্ষরিক আচরণ করার জন্য, অক্ষরগুলির $.*[\^
অভ্যন্তরের অক্ষর সেটগুলি ( […]
) বাদ দিয়ে ব্যাকস্ল্যাশ করে তার আগে অক্ষরগুলি উদ্ধৃত করা প্রয়োজন । চিঠিগুলি, অঙ্কগুলি এবং (){}+?|
উদ্ধৃত হওয়া আবশ্যক নয় (কিছু বাস্তবায়নের ক্ষেত্রে এইগুলির কয়েকটি উদ্ধৃত করে আপনি পালাতে পারেন)। সিকোয়েন্স \(
, \)
, \n
, এবং কিছু বাস্তবায়নের মধ্যে \{
, \}
, \+
, \?
, \|
এবং অন্যান্য ব্যাকস্ল্যাশ + + কারাকাস বিশেষ অর্থ আছে। $^
কিছু বাস্তবায়নে কিছু পদে উদ্ধৃতি না দিয়ে আপনি পালাতে পারেন ।
তদ্ব্যতীত, /
যদি এটি বন্ধনী এক্সপ্রেশন এর বাইরের রেজেক্সে উপস্থিত হয় তবে আপনাকে আগে একটি ব্যাকস্ল্যাশ দরকার । আপনি লেখার মাধ্যমে ডিলিমিটার হিসাবে একটি বিকল্প চরিত্র চয়ন করতে পারেন, উদাহরণস্বরূপ, s~/dir~/replacement~
বা \~/dir~p
; আপনি যদি এটিকে বিআরএতে অন্তর্ভুক্ত করতে চান তবে আপনার ডিলিমিটারের আগে একটি ব্যাকস্ল্যাশ লাগবে। আপনি যদি এমন একটি চরিত্র চয়ন করেন যা একটি বিআরইতে একটি বিশেষ অর্থ রয়েছে এবং আপনি এটি আক্ষরিকভাবে অন্তর্ভুক্ত করতে চান তবে আপনার তিনটি ব্যাকস্ল্যাশ দরকার হবে; আমি এটির প্রস্তাব দিচ্ছি না, কারণ এটি কিছু বাস্তবায়নে আলাদা আচরণ করতে পারে।
সংক্ষেপে, এর জন্য sed 's/…/…/'
:
- একক উদ্ধৃতিগুলির মধ্যে রেজেক্স লিখুন।
'\''
রেজেক্সে একক উদ্ধৃতি দিয়ে শেষ করতে ব্যবহার করুন ।
- একটি ব্যাকস্ল্যাশ আগে রাখুন
$.*/[\]^
এবং কেবলমাত্র সেই অক্ষরগুলি (তবে ব্র্যাকেট প্রকাশের ভিতরে নয়)। (প্রযুক্তিগতভাবে আপনার আগে কোনও ব্যাকস্ল্যাশ লাগানো উচিত নয় ]
তবে আমি এমন একটি বাস্তবায়ন সম্পর্কে জানি না যা ব্র্যাককেট এক্সপ্রেশনগুলির বাইরে আচরণ করে ]
এবং \]
আলাদাভাবে।
-
আক্ষরিক অর্থে চিকিত্সা করার জন্য একটি বন্ধনী প্রকাশের ভিতরে , নিশ্চিত করুন যে এটি প্রথম বা শেষ ( [abc-]
বা [-abc]
না [a-bc]
)।
^
আক্ষরিকভাবে চিকিত্সা করার জন্য একটি বন্ধনী প্রকাশের ভিতরে , নিশ্চিত হয়ে নিন যে এটি প্রথম নয় (ব্যবহার করুন [abc^]
, না [^abc]
)।
]
বন্ধনীর অক্ষর দ্বারা মিলিত অক্ষরের তালিকায় অন্তর্ভুক্ত করার জন্য, এটি প্রথম অক্ষর (বা ^
অবহেলিত সেট পরে প্রথম ): []abc]
বা [^]abc]
(নয় ) [abc]]
nor[abc\]]
প্রতিস্থাপন পাঠ্যে:
&
এবং \
ডিলিমিটার (সাধারণত /
) এবং নিউলাইনগুলিতে যেমন ব্যাকস্ল্যাশ করে সেগুলি আগে রেখে উদ্ধৃত করা দরকার ।
\
অঙ্কের পরে একটি বিশেষ অর্থ রয়েছে। \
কিছু বাস্তবায়নের পরে একটি চিঠির একটি বিশেষ অর্থ (বিশেষ অক্ষর) থাকে এবং এর \
পরে কিছু অন্যান্য চরিত্রের অর্থ হয় \c
বা c
প্রয়োগের উপর নির্ভর করে।
- আর্গুমেন্ট (
sed 's/…/…/'
) এর চারপাশে একক উদ্ধৃতি সহ , '\''
প্রতিস্থাপন পাঠ্যে একক উদ্ধৃতি রাখতে ব্যবহার করুন।
যদি রেজেক্স বা প্রতিস্থাপন পাঠ্যটি শেল ভেরিয়েবল থেকে আসে তবে এটি মনে রাখবেন
- রেজেক্স একটি বিআরই, আক্ষরিক স্ট্রিং নয়।
- রেজেক্সে একটি নতুনলাইন হিসাবে প্রকাশ করা দরকার
\n
( sed
প্যাটার্ন স্পেসে নতুন লাইন অক্ষর যুক্ত না করে অন্য কোডটি মিলবে না যা কখনই মিলবে না )। তবে মনে রাখবেন যে এটি কিছু sed
বাস্তবায়ন সহ বন্ধনী প্রকাশের ভিতরে কাজ করবে না ।
- প্রতিস্থাপন লেখা,
&
, \
এবং নতুন লাইন উদ্ধৃত করা প্রয়োজন।
- ডিলিমিটারটি উদ্ধৃত করা প্রয়োজন (তবে বন্ধনী প্রকাশের ভিতরে নয়)।
- ক্ষেপক জন্য ডবল কোট ব্যবহার করুন:
sed -e "s/$BRE/$REPL/"
।
function sedPath { path=$((echo $1|sed -r 's/([\$\.\*\/\[\\^])/\\\1/g'|sed 's/[]]/\[]]/g')>&1) } #Escape path for use with sed