গ্রেপ 'বা' রেজেক্স সমস্যা


65

আমি সম্ভাব্য স্ট্রিংগুলির মধ্যে 1 টির সাথে মেলে এমন একটি ফাইলের লাইনগুলি খুঁজে পেতে একটি রেজেক্সের সাথে গ্রেপ ব্যবহার করার চেষ্টা করছি। এখানে আমার গ্রেপ:

$ grep "^ID.*(ETS|FBS)" my_file.txt

উপরের গ্রেপ কোনও ফল দেয় না। তবে আমি যদি নির্বাহ করি:

$ grep "^ID.*ETS" my_file.txt  

অথবা

$ grep "^ID.*FBS" my_file.txt  

আমি নির্দিষ্ট লাইন মেলে না। আমার ওআর রেজেক্স কেন মিলছে না? সাহায্যের জন্য আগাম ধন্যবাদ!

উত্তর:


94

স্বাভাবিক Regex, অক্ষর (, |এবং )প্রয়োজন পলান করা হবে। সুতরাং আপনার ব্যবহার করা উচিত

$ grep "^ID.*\(ETS\|FBS\)" my_file.txt

আপনি যখন এক্সটেন্ডেড রেজেক্স ( -E) বিকল্পটি ব্যবহার করেন তখন আপনার পালানোর দরকার হয় না । দেখুন man grep, বিভাগ " Basic vs Extended Regular Expressions"।


10
আপনি egrepপরিবর্তে ব্যবহার করতে পারেন grep -E
রিকার্ডো মুরি 13

2
@ রিকার্ডোমুরি মিখালের উত্তরে বলা হয়েছে যে egrep (এবং fgrep) অবমূল্যায়ন করা হয়েছে (যদিও তারা এখনও কাজ করতে পারে)।
টিমো

27

আপনি যদি একাধিক শাখা ( |যেমন or) ব্যবহার করতে চান তবে আরও সামঞ্জস্যপূর্ণ হওয়ার জন্য আপনি "আধুনিক আরই" ওরফে ব্যবহার করতে চান তা স্পষ্ট করে বলা ভাল। Ere।

এটি করতে, গ্রেপ-ই ব্যবহার করুন :

grep -E "^ID.*(ETS|FBS)" my_file.txt

আরই, ইআর এবং পুরো "আধুনিক" ইআর গল্পটি সম্পর্কে আরও জানতে man 7 regex

বিকল্পভাবে আপনি এর egrepপরিবর্তে ব্যবহার করতে পারেন grep, তবে যেমনটি আপনি পড়তে পারেন man grep:

উদাহরণস্বরূপ গ্রেপ-ই সমান। fgrep হ'ল গ্রেপ-এফ

(...)

পারেন যেমন সরাসরি আবাহন egrep বা fgrep হয় অবচিত


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