এইভাবে সেড ব্যবহার করে মাল্টি-ক্যারেক্টার স্ট্রিংগুলির অ-লোভী মেলানো দৃ .়তার সাথে করা যায়। বলে দেয় আপনি প্রতি পরিবর্তন করতে চান foo...bar
করতে <foo...bar>
সুতরাং উদাহরণস্বরূপ এই ইনপুট:
$ cat file
ABC foo DEF bar GHI foo KLM bar NOP foo QRS bar TUV
এই আউটপুট হয়ে উঠতে হবে:
ABC <foo DEF bar> GHI <foo KLM bar> NOP <foo QRS bar> TUV
এটি করার জন্য আপনি foo এবং বারকে স্বতন্ত্র অক্ষরগুলিতে রূপান্তর করেন এবং তারপরে তাদের মধ্যে এই চরিত্রগুলির অবজ্ঞা ব্যবহার করুন:
$ sed 's/@/@A/g; s/{/@B/g; s/}/@C/g; s/foo/{/g; s/bar/}/g; s/{[^{}]*}/<&>/g; s/}/bar/g; s/{/foo/g; s/@C/}/g; s/@B/{/g; s/@A/@/g' file
ABC <foo DEF bar> GHI <foo KLM bar> NOP <foo QRS bar> TUV
উপরে:
s/@/@A/g; s/{/@B/g; s/}/@C/g
রূপান্তর করা হচ্ছে {
এবং }
স্থানধারীর স্ট্রিংগুলিতে রূপান্তর করা হচ্ছে যা ইনপুটটিতে বিদ্যমান নেই তাই সেই অক্ষরগুলি তখন রূপান্তর করতে foo
এবং এগুলিতে উপলভ্য bar
।
s/foo/{/g; s/bar/}/g
রূপান্তরের উদ্দেশ্যে foo
এবং bar
করতে {
এবং }
যথাক্রমে
s/{[^{}]*}/<&>/g
রূপান্তরিত - আমরা চাই ওপি সম্পাদন করা foo...bar
হয়<foo...bar>
s/}/bar/g; s/{/foo/g
রূপান্তরের উদ্দেশ্যে {
এবং }
ফিরে foo
এবং bar
।
s/@C/}/g; s/@B/{/g; s/@A/@/g
প্লেসহোল্ডার স্ট্রিংগুলিকে তাদের মূল চরিত্রে ফিরিয়ে আনছে।
নোট করুন যে উপরেরটি কোনও নির্দিষ্ট স্ট্রিংটি ইনপুটটিতে উপস্থিত না থাকায় নির্ভর করে না কারণ এটি প্রথম ধাপে এ জাতীয় স্ট্রিং তৈরি করে, এবং এটি কোনও যত্ন নেয় না যে আপনি কোন নির্দিষ্ট রেজিএক্সপেক্সের কোনটি মিল করতে চান কারণ আপনি {[^{}]*}
যতবার প্রয়োজন ততবার ব্যবহার করতে পারবেন আপনি চাইছেন এমন আসল ম্যাচটি এবং / অথবা শেড সংখ্যাসূচক ম্যাচ অপারেটরের সাথে আলাদা করতে অভিব্যক্তিতে, উদাহরণস্বরূপ কেবল ২ য় ঘটনাটি প্রতিস্থাপন করতে:
$ sed 's/@/@A/g; s/{/@B/g; s/}/@C/g; s/foo/{/g; s/bar/}/g; s/{[^{}]*}/<&>/2; s/}/bar/g; s/{/foo/g; s/@C/}/g; s/@B/{/g; s/@A/@/g' file
ABC foo DEF bar GHI <foo KLM bar> NOP foo QRS bar TUV