গ্রেপ এর একাধিক শব্দের "বা" এর জন্য রেজেেক্স


12
[Computer]$ grep "foo|bar" filename

আমি বুঝেছি উপরের কমান্ডটি প্রতিটি লাইনের ফাইলনামে ফিরিয়ে ফেলা উচিত যেখানে "foo" বা "বার" উপস্থিত থাকে। ম্যান পেজগুলি নিশ্চিত করে | রেজেক্স বা চিহ্ন হিসাবে এবং কোড "foo" এবং "বার" এর জন্য স্বাধীনভাবে কাজ করে। আমি কী মিস করছি?

উত্তর:


21

গ্রেপ ডিফল্টরূপে বেসিক নিয়মিত এক্সপ্রেশন (বিআরই) ব্যবহার করে। ম্যান পৃষ্ঠা থেকে:

বেসিক বনাম প্রসারিত নিয়মিত এক্সপ্রেশন: বেসিক নিয়মিত এক্সপ্রেশনগুলিতে মেটা-অক্ষর?, +, {, |, (,) তাদের বিশেষ অর্থ হারিয়ে ফেলে; পরিবর্তে ব্যাকস্ল্যাশড সংস্করণগুলি \?, +, {, \ |, (এবং) ব্যবহার করুন।

সুতরাং আপনি হয় পালাতে হবে |:

grep "foo\|bar" filename 

বা বর্ধিত নিয়মিত এক্সপ্রেশন চালু করুন:

grep -E "foo|bar" filename

আমি ম্যান পেজে দেখেছি এবং ভুল বুঝেছি। আমি ভেবেছিলাম এটির অর্থ \ | এটি ব্যক্তিগত অভিব্যক্তির বিপরীতে সম্পূর্ণ ফুসফুস "foo | বার" সন্ধান করবে। দ্রুত সাড়া দেওয়ার জন্য ধন্যবাদ!
ওকেস্তা এশু

4
আপনি এর পরিবর্তে egrep(একটি উপাধি grep -E) ব্যবহার করতে পারেন grep
স্পিকার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.