`গ্রেপা,` উদাহরণস্বরূপ, এবং `fgrep` এর মধ্যে পার্থক্য কী?


273

কেউ আমার মধ্যে প্রযুক্তিগত পার্থক্য বলতে পারবেন grep, egrepএবং fgrepএবং প্রদান উপযুক্ত উদাহরণ?

যখন আমি ব্যবহার করতে হবে না grepউপর egrepএবং তদ্বিপরীত?


7
: সুপার-ইউজার, grep, egrep, fgrep এবং pgrep মধ্যে পার্থক্য একটি মহান চিত্রণ হয়েছে superuser.com/questions/508881/...
এরিক Leschinski

উত্তর:


292
  • egrep এর 100% সমতুল্য grep -E
  • fgrep এর 100% সমতুল্য grep -F

.তিহাসিকভাবে এই সুইচগুলি পৃথক বাইনারিগুলিতে সরবরাহ করা হয়েছিল। কিছু সত্যই পুরানো ইউনিক্স সিস্টেমে আপনি দেখতে পাবেন যে আপনাকে পৃথক বাইনারিগুলি কল করতে হবে, তবে সমস্ত আধুনিক সিস্টেমে স্যুইচগুলি অগ্রাধিকার দেওয়া হয়। গ্রেপের জন্য ম্যান পেজটিতে এই সম্পর্কে বিশদ রয়েছে।

তারা যা করেন তা হিসাবে, -Eগ্রেপটিকে একটি বিশেষ মোডে স্যুইচ করে যাতে এক্সপ্রেশনটিকে এর ER (এক্সটেন্ডেড রেগুলার এক্সপ্রেশন) হিসাবে মূল্যায়িত করা হয় তার সাধারণ প্যাটার্ন মিলের বিপরীতে। এই বাক্য গঠনটির বিশদটি ম্যান পৃষ্ঠায় রয়েছে।

-E, --extended-regexp
PATTERN এর বর্ধিত নিয়মিত অভিব্যক্তি হিসাবে ব্যাখ্যা করুন

-Fসুইচ যেখানে এটি একটি প্যাটার্ন মেলে গ্রহণ একটি ভিন্ন মোডে, grep পরিবর্তন, কিন্তু তারপর যে প্যাটার্ন আপ splits প্রতি লাইনে একটি সার্চ স্ট্রিং মধ্যে এবং কোনো বিশেষ প্যাটার্ন ম্যাচিং না করে স্ট্রিং কোনো একটি বা অনুসন্ধান করে।

-F, --fixed-strings
PATTERN কে নতুন লাইনের দ্বারা পৃথক করা স্থির স্ট্রিংগুলির একটি তালিকা হিসাবে ব্যাখ্যা করুন, যার মধ্যে কোনওটি মিলে যেতে হবে।

এখানে কয়েকটি উদাহরণের পরিস্থিতি রয়েছে:

  • আপনার সরল পাঠ্যে দশটি ইউনিক্স ব্যবহারকারীর নাম বলার তালিকা সহ একটি ফাইল রয়েছে। তালিকাভুক্ত দশ জন ব্যবহারকারীর মধ্যে কোনও বিশেষ গ্রুপে রয়েছে কিনা তা দেখতে আপনি আপনার মেশিনে গ্রুপ ফাইলটি অনুসন্ধান করতে চান:

    grep -F -f user_list.txt /etc/group
    

    -Fস্যুইচটি এখানে সহায়তা করার কারণটি হ'ল আপনার প্যাটার্ন ফাইলের ব্যবহারকারীর নামগুলি সরল পাঠ্য স্ট্রিং হিসাবে ব্যাখ্যা করা। উদাহরণস্বরূপ বিন্দুগুলি ওয়াইল্ড কার্ডের চেয়ে বিন্দু হিসাবে ব্যাখ্যা করা হবে।

  • আপনি অভিনব এক্সপ্রেশন ব্যবহার করে অনুসন্ধান করতে চান। উদাহরণস্বরূপ প্রথম বন্ধনী একটি ওআর অপারেটর হিসাবে ব্যবহৃত ()গ্রুপগুলি নির্দেশ করতে ব্যবহার করা যেতে পারে |। আপনি এই অনুসন্ধানটি ব্যবহার করে চালাতে পারেন -E:

    grep -E '^no(fork|group)' /etc/group
    

    ... "নফর্ক" বা "নোগ্রুপ" দিয়ে শুরু হওয়া লাইনগুলি ফিরিয়ে আনতে। -Eস্যুইচ ব্যতীত আপনাকে জড়িত বিশেষ অক্ষরগুলি থেকে বাঁচতে হবে কারণ সাধারণ প্যাটার্নের মিলের সাথে তারা কেবল সেই সঠিক প্যাটার্নটি অনুসন্ধান করবে;

    grep '^no\(fork\|group\)' /etc/group
    

17
কিছু সিস্টেমে নেই egrepবা fgrep; -Eএবং -Fমানক। এখানে ছোট ছোট অসঙ্গতিগুলি রয়েছে egrep: এটি {কিছুটা আলাদাভাবে আচরণ করে ।
গিলস

4
fgrepআহো-করাসিক ব্যাকএন্ড ব্যবহার করে, grepআবার কমেন্টজ-ওয়ালটারের একটি পরিবর্তিত সংস্করণ ব্যবহার করা হয়েছে। এর অর্থ হল grepসবচেয়ে খারাপ O (mn) জটিলতা রয়েছে যখন fgrepসবচেয়ে খারাপ O (m + n) এ থাকে।
স্লেটার ভিক্টোরফ


আমি সম্প্রতি একটি অ্যান্ড্রয়েড সিস্টেমে ঘটেছিলাম যার উপরে egrepএবং grep -Eবিভিন্ন এক্সিকিউটেবল, ব্যাসিবক্স এবং বিএসডি গ্রেপ দ্বারা পরিচালিত হয়েছিল। দুটি রূপটির নন-পিক্সিক্স রেজেক্স কনস্ট্রাক্টসগুলির মতো আচরণগত পার্থক্য ছিল, যেমন \s। এতে অনেক বিভ্রান্তির সৃষ্টি হয়েছিল ...
লিই

33

থেকে man grep:

 উদাহরণস্বরূপ গ্রেপ-ই সমান।
 fgrep হ'ল গ্রেপ-এফ। হয় egrep হিসাবে সরাসরি ডাকে বা  
  fgrep হ্রাস করা হয়, তবে historicalতিহাসিক অ্যাপ্লিকেশনগুলির অনুমতি দেওয়ার জন্য সরবরাহ করা হয়
  যা তাদের উপর নির্ভর না করে চালিত চালানোর জন্য।

আপনি ব্যবহার করেন fgrepবা grep -Fযদি আপনি না চান তবে গ্রেপড স্ট্রিংটিকে একটি নিদর্শন হিসাবে ব্যাখ্যা করা উচিত।

আপনি ব্যবহার egrepবা grep -Eআপনার একটি বর্ধিত regexp ব্যবহার প্রয়োজন হলে।


13

egrepএবং fgrepমূলত এর সমান grep -Eএবং grep -F(যথাক্রমে):

   -E, --extended-regexp
          Interpret PATTERN as an extended regular  expression  (ERE,  see
          below).  (-E is specified by POSIX.)

   -F, --fixed-strings
          Interpret  PATTERN  as  a  list  of  fixed strings, separated by
          newlines, any of which is to be matched.  (-F  is  specified  by
          POSIX.)

ত্রুটি বার্তা যদিও পৃথক হতে পারে।


2
ঠিক আছে, কিন্তু কি হল একটি বর্ধিত রেগুলার এক্সপ্রেশন? এটি সত্যই নীচে ব্যাখ্যা করে না। কয়েকটি উদাহরণ চমৎকার হবে ...
আইসোমোরফিজম

@ আইসোমরফিস্মস: এই উইকিবুকগুলি লিঙ্কটি সুন্দরভাবে ব্যাখ্যা করেছে ...
zb226

8

"ম্যান গ্রেপ" থেকে:

তিনটি ভেরিয়েন্ট প্রোগ্রাম যেমন :rep, fgrep এবং rgrep উপলব্ধ। উদাহরণস্বরূপ গ্রেপ-ই সমান। fgrep হ'ল গ্রেপ-এফ। আরগ্রিপ গ্রেপ-আর-এর সমান। যেমন egrep বা fgrep হিসাবে সরাসরি অনুরোধ হ্রাস করা হয়, তবে historicalতিহাসিক অ্যাপ্লিকেশনগুলি যা অবিস্মরণীয়ভাবে চালানোর জন্য তাদের উপর নির্ভর করে allow


2
প্রশ্ন একটি উপযুক্ত উদাহরণ জন্য জিজ্ঞাসা।
isomorphismes

3

আপনি যদি ভারব্যাটিম স্ট্রিং সন্ধান করেন এবং আপনি নিশ্চিত হয়ে যেতে চান যে আপনি যে স্ট্রিংটি পেরিয়ে গেছেন তা ভারব্যাটিয়াম (অর্থাত্ বিন্দু বা প্রশ্ন চিহ্নকে অন্য কিছু হিসাবে ব্যাখ্যা করা হবে এমন ঝুঁকি ছাড়াই) fgrep বা egrep -F ব্যবহার করুন।

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

BTW। আমি সত্যিই দিতে করার জন্য উত্সাহিত করি ACK ব্যবহার করে দেখুন - এটা PREGs সমর্থন করে, এবং আরো অনেক কিছু দরকারী অক্ষমতা (হয়েছে অর্থাত রং, .svn, symlinks অনুসরণ করার ক্ষমতা মত সম্ভবত নয়-কি-আপনি-চান ডিরেক্টরি কুঁদন, এবং এটি টাইপ করার একটি বিট আরো সহজ গ্রেপ-ই এর চেয়ে বেশি) k

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