গ্রেপ "+" অপারেটর কাজ করে না


31

এই

ls -l /var/log | awk '{print $9}' | grep "^[a-z]*\.log."

এই ফলাফল:

alternatives.log.1
alternatives.log.10.gz
alternatives.log.2.gz
alternatives.log.3.gz
alternatives.log.4.gz
alternatives.log.5.gz
alternatives.log.6.gz
alternatives.log.7.gz
alternatives.log.8.gz
alternatives.log.9.gz
apport.log.1
apport.log.2.gz
apport.log.3.gz

কিন্তু এই:

ls -l /var/log | awk '{print $9}' | grep "^[a-z]+\.log."

কিছুই আউটপুট।

কেন? আমি এইমাত্র পরিবর্তন *করতে +। এটি কি একই রকম নয়? অপারেটরটির +কেবল কমপক্ষে একটি ম্যাচ এবং *শূন্য বা তার বেশি প্রয়োজন।

উত্তর:


36

এটি কারণ grep(কোনও যুক্তি ছাড়াই) কেবলমাত্র নিয়মিত প্রকাশের সাথে কাজ করে। +বর্ধিত নিয়মিত এক্সপ্রেশনগুলির অংশ, তাই এটি ব্যবহার করতে আপনার ব্যবহার করতে হবে grep -Eবা egrep:

ls -l /var/log | awk '{print $9}' | grep -E "^[a-z]+\.log."

এছাড়াও, আপনি যদি বর্ধিত নিয়মিত অভিব্যক্তিটি ব্যবহার না করতে চান তবে আপনি এটি করতে পারেন:

ls -l /var/log | awk '{print $9}' | grep "^[a-z][a-z]*\.log."

ধন্যবাদ। আমি এখন সেই কাজটি সম্পর্কে জানি, তবে কেন আমি "+" কাজ করে না তা ভাবছিলাম। এখন আমি জানি. আবার ধন্যবাদ.
মার্কো

11

মিজিনদের উত্তরটি বিশদভাবে জানাতে, "বিশেষ চরিত্রগুলি" যেমন স্ট্যান্ডার্ড রেজেক্সেও কাজ করে তবে আপনার এগুলি একটি ব্যাকস্ল্যাশ দিয়ে পালাতে হবে। আপনি বলতে পারেন, ডিফল্ট প্রত্যাশাগুলি স্ট্যান্ডার্ড এবং প্রসারিত রেজেক্সের মধ্যে বিপরীত হয়:

স্ট্যান্ডার্ড রেজেক্সে, অক্ষরগুলি অক্ষরে অক্ষরে ডিফল্ট হয়ে যায় match উদাহরণস্বরূপ, grep "ab+"+ এ একটি আক্ষরিক +। রেজেক্স উদাহরণস্বরূপ "ab + ab" খুঁজে পাবে, তবে "আবদ্ধ" নয়। + এর "বিশেষ অর্থ" ব্যবহার করতে আপনার এড়াতে হবে। সুতরাং grep "ab\+""abbb" খুঁজে পাবেন, তবে আর "ab + ab" পাবেন না। কারণ সর্বশেষ উদাহরণে, + এর পরিমাণটিকে "এক বা অনেকগুলি বি" হিসাবে কোয়ানটিফায়ার হিসাবে ব্যাখ্যা করা হয়।

প্রসারিত রেজেক্সে এটি প্রায় অন্যভাবে। এখানে, আপনাকে আক্ষরিক অর্থে চিকিত্সা করার জন্য "বিশেষ অক্ষরগুলি" থেকে পালাতে হবে। সুতরাং grep -E "ab+""abbb" খুঁজে পাওয়া যায় তবে "ab + ab" খুঁজে পাওয়া যায় না। যদি আপনি + এড়িয়ে যান তবে এটি আক্ষরিক সাথে মিলবে। সুতরাং grep -E "ab\+""আব + আব" খুঁজে পাওয়া যায়, তবে "আবদ্ধ" হয় না।


1
কী উত্তরাধিকারসূত্রে জগাখিচুতা ... ;-) যাদু এবং সুপারিম্যাগিকের মত ভিমে। Urgh। পশ্চাদপদ সামঞ্জস্যের জন্য মূল্য দেওয়ার জন্য ...
রুমানো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.