ক্রিস ডাউন ইতিমধ্যে দেখিয়েছে যে কীভাবে আপনি একটি ব্লকের স্পষ্টত 'if' বিবৃতি ব্যবহার করে regexps জন্য অন্য কোনও পেতে পারেন। আপনি কিছু অন্যান্য উপায়েও একই প্রভাব পেতে পারেন, যদিও তার সমাধান সম্ভবত আরও ভাল।
একটি তৃতীয় রেজেক্স লিখতে হবে যা কেবল অন্যদের সাথে মেলে না এমন পাঠ্যের সাথে মিলবে, আপনার ক্ষেত্রে এটি দেখতে এরকম কিছু দেখবে:
awk '/^R1/ { print "=>" $0}
/^R2/ { print "*" $0}
/^[^R]/ || /^R[^12]/ { print $0 } '
দ্রষ্টব্য, এটি নোঙ্গর করা regexps ব্যবহার করে - রেজেক্সপসের শুরুতে a কেবল একটি লাইনের শুরুতে মিলবে - আপনার মূল নিদর্শনগুলি এটি করে নি, যা মিলাকে কিছুটা কমিয়ে দেয় কারণ এটি একটি লাইনে সমস্ত অক্ষর চেক করবে না পরের লাইন অবধি স্কিপিং তৃতীয় ("অন্য") কেস এমন একটি রেখার সাথে মিলবে যা কিছু অক্ষর দিয়ে শুরু হয় যা 'আর' নয় ([^ আরআর]) বা এটি শুরু হয় 'আর' এর পরে একটি অক্ষর যা '1' বা 'নয়' 2 '(আর [^ 12])। Different এর দুটি পৃথক অর্থ কিছুটা বিভ্রান্তিকর, তবে সেই ভুলটি অনেক আগে হয়েছিল এবং শীঘ্রই কোনও পরিবর্তন করা হবে না।
পরিপূরক রেজেক্সপগুলি ব্যবহার করার জন্য, তাদের সত্যিকারের অ্যাঙ্কর করা দরকার, অন্যথায় [] R] যেমন এটি অনুসরণ করা 1 টির সাথে মিলবে। আপনার মতো খুব সাধারণ রেইগেক্সপসের জন্য, এই পদ্ধতির ব্যবহার কার্যকর হতে পারে, তবে রেজিেক্সপস আরও জটিল হওয়ার সাথে সাথে, এই পদ্ধতির ব্যবস্থা করা যায় না। পরিবর্তে, আপনি প্রতিটি লাইনের জন্য রাষ্ট্রের ভেরিয়েবলগুলি ব্যবহার করতে পারেন:
awk '{ handled = 0 }
/^R1/ { print "=>" $0; handled = 1}
/^R2/ { print "*" $0; handled = 1}
{ if (!handled) print $0 } '
এই সেটগুলি প্রতিটি নতুন লাইনের জন্য শূন্যে পরিচালিত হয়, তারপরে 1 এ এটি দুটি রিজেক্সপগুলির মধ্যে দুটির সাথে মিলে গেলে এবং শেষ পর্যন্ত যদি এটি শূন্য হয় তবে মুদ্রণ $ 0 চালায়।