লজিক অপারেটরদের সাথে গ্রেপ


19

গ্রিপের মতো কোনও ইউটিলিটি রয়েছে যা আমাকে লজিক অপারেটরগুলির সাথে গ্রেপ অনুসন্ধান করতে সক্ষম করবে। আমি বাসা বাঁধতে এবং লজিক্যাল কনস্ট্রাক্টগুলি অবাধে সংহত করতে সক্ষম হতে চাই। উদাহরণস্বরূপ, এই জাতীয় জিনিসগুলি সম্ভব হওয়া উচিত:

grep (term1 && term2) || (term1 && (term3 xor term4)) *

আমি বুঝতে পারি এটি ভ্যানিলা গ্রেপ এবং অতিরিক্ত বাশ স্ক্রিপ্টিংয়ের সাহায্যে করা যেতে পারে তবে আমার লক্ষ্য এখানে তা করা এড়ানো।

grep 

উত্তর:


12

এর awkসাথে perl, আপনাকে শর্তাদি মোড়ানো //করতে হবে, তবে এটি করা যেতে পারে:

awk '(/term1/ && /term2/) || (/term1/ && xor(/term3/, /term4/))' 

28

grepলজিকাল অপারেটরগুলির সাথে ব্যবহার করার অনেক উপায় রয়েছে ।

  1. ওআর শর্তের \|জন্য একাধিক নিদর্শন পৃথক করতে ব্যবহার করুন ।

    উদাহরণ: grep 'pattern1\|pattern2' filename

  2. ওআর শর্তের -Eজন্য একাধিক নিদর্শন প্রেরণ করতে বিকল্পটি ব্যবহার করুন ।

    উদাহরণ: grep -E 'pattern1|pattern2' filename

  3. একটি একক ব্যবহার -eকেবল একটি প্যাটার্নের সাথে মেলে তবে একাধিক -eবিকল্প ব্যবহার করা একাধিক প্যাটার্নের সাথে মেলে।

    উদাহরণ: grep -e pattern1 -e pattern2 filename

  4. grep -vনা অপারেশন অনুকরণ করতে পারেন ।

  5. এতে কোনও অ্যান্ড অপারেটর নেই grep, তবে আপনি বিকল্পটি ব্যবহার করে এবং জাল-জাল অনুকরণ করতে পারেন -E

    উদাহরণ: grep -E 'pattern1.*pattern2|pattern2.*pattern1' filename

    উপরের উদাহরণটি সমস্ত লাইনগুলিতে মেলে যা উভয় ক্রমে প্যাটার্ন 1 এবং প্যাটার্ন 2 রয়েছে)


1
-E&&এটি অর্ডার-সংবেদনশীল
কারণটির

grep foo | grep barAND করার আরও সাধারণ উপায়।
ক্যানস্টার

2
প্রকৃত "এবং" অপারেটর নেই বলে পরিষ্কারভাবে ব্যাখ্যা করার জন্য +1, এবং আমরা সবচেয়ে ভাল যা করতে পারি তা হল একটি ওআর কাঠামো ব্যবহার করে একটি হ্যাক সিমুলেট করা। এটি অবশ্যই 3 টিরও বেশি শর্তের সাথে অযথাই পাবে, তবে দুটি শর্তের জন্য এটি ভালভাবে কাজ করে।
এরিক হিপারল - কোডস্লেয়ার2010

grep -c -e MATCH1 -e MATCH2 দুর্দান্ত হয় যখন আপনি ফাইল নাম গণনায় আগ্রহী।
andrej

4

আপনি পার্ল ব্যবহার করতে পারেন:

perl -wne 'print if (/term1/ && /term2/) || (/term1/ && (/term3/ xor /term4/))'

0
sed '/term1/!d;/term2/b' -e '/term3/!d;/term4/d' *

আমি বিশ্বাস করি যে আপনি যা করার চেষ্টা করছেন তা পূরণ করে। এটি dআউটপুট থেকে কোনও লাইনের সাথে মেলে না term1, এটি bস্ক্রিপ্টের বাইরে চলেছে (এবং তাই স্বয়প্রিন্টগুলি) যে কোনও লাইন অবশিষ্ট রয়েছে এবং এটি মেলে term2এবং লাইনগুলির জন্য এটি মেলে না term3এমন কোনও এবং মুলে না এমন কোনওগুলি মুছে দেয় term4

sed স্ক্রিপ্টগুলি ক্রমে মূল্যায়ন করা হয় এবং সমস্ত পরীক্ষাগুলি বুলিয়ান হয়, সুতরাং পরীক্ষার ফলে প্রাপ্ত যে কোনও ক্রিয়া সরাসরি নিম্নলিখিত কোনও ক্রিয়াকলাপের আচরণকে প্রভাবিত করে।


0

grepএকটি লজিকাল এবং অর্জনের জন্য আমি চেইন কমান্ডগুলিতে ব্যবহার করি :

grep expr1 filename | grep expr2

আমি বিশ্বাস করি এটি বেশ সোজা, ইউনিক্সের মতো এবং মার্জিত।


তারপরে আপনি -EOR-ing এবং অবহেলার জন্য বিকল্পের সাথে (টুশিকে সম্পূর্ণরূপে ব্যাখ্যা করেছেন) একত্রিত করতে পারেন -v

আপনার নির্দিষ্ট উদাহরণটি বেশ কদর্য এবং সম্ভবত আরও কিছু শক্তিশালী ইউটিলিটি (@ মুড়ুর উত্তর দেখুন) থেকে উপকৃত হবে।

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