আপনি যদি 1 বা ততোধিক অবৈধ অক্ষরের কোনও ক্রমকে বোঝাতে শব্দটিকে যোগ্য করে থাকেন তবে উত্তরটি অবশ্যই হ্যাঁ, এবং এটি খুব সহজভাবে করা হয়েছে। এটি কারণ এবং এটি বুলিয়ান পরিপূরক এবং - স্ট্রিংয়ের সমস্ত অক্ষর সম্পূর্ণ হয়ে থাকে - ইউ কোনও সম্ভাব্য স্ট্রিংকে একইভাবে বর্ণনা করতে পারে।[[:blank:]]*
[^[:blank:]]*
[[:blank:]]*
[^[:blank:]]*
.*
যদি কোনও অসম্পূর্ণ অক্ষর বা অন্যথায় অবৈধ বাইট সিকোয়েন্সটি কোনও স্ট্রিংয়ের মধ্যে উপস্থিত থাকে তবে তা সফলভাবে এটিকে মাথা থেকে লেজ পর্যন্ত বর্ণনা করতে পারে না - কখনও কখনও ভুল এনকোডিংয়ের সাথে স্ট্রিংয়ের ব্যাখ্যা দেওয়ার সময় ঘটতে পারে। যে কোনও স্ট্রিংয়ে বাইট প্রতি সম্পূর্ণ অক্ষর নিশ্চিত করতে, সি লোকেলকে এইভাবে বাধ্য করা যেতে পারে:
LC_ALL=C sed ...
... যা মাথা থেকে লেজ পর্যন্ত স্ট্রিংয়ের বর্ণন সম্পর্কিত কোনও সমস্যা এড়াতে পারে যেমন .*
বা সমস্ত-সমেত প্যাটার্ন সহ or([ ]*[^ ]*)*
পুরোপুরি পরিপূরক নিদর্শনটি প্যাটার্নটির কোনও বিরতি ছাড়াই শেষ সম্ভাব্য ঘটনার উপর বাম থেকে ডানদিকে যে কোনও স্ট্রিংয়ের দৈর্ঘ্য অবতরণের জন্য প্রয়োজনীয় যতবার পুনরাবৃত্তি করতে পারে। এটি অবশ্যই, নিয়মিত ভাষা।
BRE:
sed 's/\(\([^[:blank:]]*\)[[:blank:]]*\)*/\2/'
ere:
sed -E 's/(([^[:blank:]]*)[[:blank:]]*)*/\2/'
এই উভয় সংস্করণ এখনও ফাঁকা রেখা মুদ্রণ করবে এবং এটি কারণ ক্লিন *
তারকা একটি প্যাটার্নের শূন্য বা তার বেশি সংখ্যার সাথে মেলে। এটি প্রথমে শূন্য বা আরও বেশি ফাঁকা অক্ষর নয়, তারপরে শূন্য বা আরও ফাঁকা অক্ষর, তারপরে শূন্য বা আরও বেশি সংঘবদ্ধ হওয়া ম্যাচগুলি না হওয়া পর্যন্ত এটি পুরোপুরি স্ট্রিংয়ের সাথে মেলে না।
এই সমস্তটির সাথে মিলে যাওয়ার পরে, ম্যাজিকটি প্রতিস্থাপনে ঘটে - রেফারেন্সগুলি গোষ্ঠীগুলির দ্বারা ফিরে আসে \1
এবং \2
এটি প্রতিটিটির সর্বশেষ ঘটনা। সুতরাং প্রতিস্থাপনটি তৈরি করা হলে সমস্ত স্ট্রিং শূন্য অক্ষরের লাইনে কেবল শেষ ঘটনাটি বা আরও ফাঁকা অক্ষর নয় - বা উপগোষ্ঠীর সাথে প্রতিস্থাপন করা হয় \2
।
অবশ্যই এটি কোনও সম্ভাব্য স্ট্রিংয়ের জন্য কাজ করে - এমনকি একটি খালিও - যার অর্থ উভয় ফর্ম লাইনগুলির জন্য নিউলাইন অক্ষরগুলি মুদ্রণ করবে যা কেবল ফাঁকা অক্ষর বা মোটেও কিছুই নয়। এটি পরিচালনা করতে আপনি করতে পারেন এমন কয়েকটি জিনিস রয়েছে তবে প্রথমে অক্ষর শ্রেণিটি টাইপ করা একটু সহজ করে তুলুন:
b='[:blank:]'
এখন, কেবল যদি মুদ্রণ করতে কোনও লাইনে এক বা একাধিক ফাঁকা অক্ষর থাকে তবে আপনি করতে পারেন:
BRE:
sed -n "s/\(\([^$b]*\)[$b]*\)*/\2/;/./p"
ere:
sed -En "/[^$b]/s/(([^$b]*)[$b]*)*/\2/p"
- বিআরই কেস - প্রতিস্থাপন সর্বদা সঞ্চালিত হয় এবং কমপক্ষে একটি অক্ষর বিশিষ্ট কেবলমাত্র প্যাটার্ন স্পেসগুলি মুদ্রিত হয়।
- পূর্ববর্তী ক্ষেত্রে - প্রতিস্থাপনটি কেবলমাত্র কোনও প্যাটার্ন স্পেসে চেষ্টা করা হয় যেখানে কমপক্ষে একটি ফাঁকা চর থাকে না।
উভয়ই ফর্ম উভয় পদ্ধতির সাথে কাজ করবে - যতক্ষণ না সিনট্যাক্স সঠিক হয়।
-n
সুইচ অক্ষম স্বয়ংক্রিয় মুদ্রণ প্যাটার্ন স্থান, এবং p
পতাকা s///
ubstitution বা /
ঠিকানা /
কমান্ড এর ফলাফলের শুধুমাত্র যদি সফল ছাপে।
এই একই যুক্তিটি যে কোনও {num}
সংঘটিত হওয়ার জন্য প্রয়োগ করা যেতে পারে , যেমন:
BRE:
sed -n "s/\([$b]*\([^$b]\{1,\}\)\)\{num\}.*/\2/p"
ere:
sed -En "s/([$b]*([^$b]+)){num}.*/\2/p"
... যেখানে num
উভয় রেজেক্সপগুলিকে একটি সংখ্যা দিয়ে প্রতিস্থাপন করা যেতে পারে কেবল {num}
ফাঁকা অক্ষরের ক্রম হিসাবে কেবলমাত্র তৃতীয় নির্দিষ্ট ঘটনা মুদ্রণ করতে । একটি স্ট্রিংয়ের শীর্ষস্থানীয় স্থানের জন্য গণনাটি স্কিউড না হয় তা নিশ্চিত করতে এখানে কিছুটা আলাদা ফর্ম ব্যবহার করা হয়।
নোট করুন যে -E
ERE স্যুইচটি sed
BSD এবং GNU উভয় সংস্করণেই সমর্থিত, যদিও এটি এখনও পসিক্স স্ট্যান্ডার্ড সিনট্যাক্স নয়।
sed
?