কেউ আমার মধ্যে প্রযুক্তিগত পার্থক্য বলতে পারবেন grep
, egrep
এবং fgrep
এবং প্রদান উপযুক্ত উদাহরণ?
যখন আমি ব্যবহার করতে হবে না grep
উপর egrep
এবং তদ্বিপরীত?
কেউ আমার মধ্যে প্রযুক্তিগত পার্থক্য বলতে পারবেন grep
, egrep
এবং fgrep
এবং প্রদান উপযুক্ত উদাহরণ?
যখন আমি ব্যবহার করতে হবে না grep
উপর egrep
এবং তদ্বিপরীত?
উত্তর:
.তিহাসিকভাবে এই সুইচগুলি পৃথক বাইনারিগুলিতে সরবরাহ করা হয়েছিল। কিছু সত্যই পুরানো ইউনিক্স সিস্টেমে আপনি দেখতে পাবেন যে আপনাকে পৃথক বাইনারিগুলি কল করতে হবে, তবে সমস্ত আধুনিক সিস্টেমে স্যুইচগুলি অগ্রাধিকার দেওয়া হয়। গ্রেপের জন্য ম্যান পেজটিতে এই সম্পর্কে বিশদ রয়েছে।
তারা যা করেন তা হিসাবে, -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
egrep
বা fgrep
; -E
এবং -F
মানক। এখানে ছোট ছোট অসঙ্গতিগুলি রয়েছে egrep
: এটি {
কিছুটা আলাদাভাবে আচরণ করে ।
fgrep
আহো-করাসিক ব্যাকএন্ড ব্যবহার করে, grep
আবার কমেন্টজ-ওয়ালটারের একটি পরিবর্তিত সংস্করণ ব্যবহার করা হয়েছে। এর অর্থ হল grep
সবচেয়ে খারাপ O (mn) জটিলতা রয়েছে যখন fgrep
সবচেয়ে খারাপ O (m + n) এ থাকে।
egrep
এবং grep -E
বিভিন্ন এক্সিকিউটেবল, ব্যাসিবক্স এবং বিএসডি গ্রেপ দ্বারা পরিচালিত হয়েছিল। দুটি রূপটির নন-পিক্সিক্স রেজেক্স কনস্ট্রাক্টসগুলির মতো আচরণগত পার্থক্য ছিল, যেমন \s
। এতে অনেক বিভ্রান্তির সৃষ্টি হয়েছিল ...
থেকে man grep
:
উদাহরণস্বরূপ গ্রেপ-ই সমান। fgrep হ'ল গ্রেপ-এফ। হয় egrep হিসাবে সরাসরি ডাকে বা fgrep হ্রাস করা হয়, তবে historicalতিহাসিক অ্যাপ্লিকেশনগুলির অনুমতি দেওয়ার জন্য সরবরাহ করা হয় যা তাদের উপর নির্ভর না করে চালিত চালানোর জন্য।
আপনি ব্যবহার করেন fgrep
বা grep -F
যদি আপনি না চান তবে গ্রেপড স্ট্রিংটিকে একটি নিদর্শন হিসাবে ব্যাখ্যা করা উচিত।
আপনি ব্যবহার egrep
বা grep -E
আপনার একটি বর্ধিত regexp ব্যবহার প্রয়োজন হলে।
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.)
ত্রুটি বার্তা যদিও পৃথক হতে পারে।
"ম্যান গ্রেপ" থেকে:
তিনটি ভেরিয়েন্ট প্রোগ্রাম যেমন :rep, fgrep এবং rgrep উপলব্ধ। উদাহরণস্বরূপ গ্রেপ-ই সমান। fgrep হ'ল গ্রেপ-এফ। আরগ্রিপ গ্রেপ-আর-এর সমান। যেমন egrep বা fgrep হিসাবে সরাসরি অনুরোধ হ্রাস করা হয়, তবে historicalতিহাসিক অ্যাপ্লিকেশনগুলি যা অবিস্মরণীয়ভাবে চালানোর জন্য তাদের উপর নির্ভর করে allow
আপনি যদি ভারব্যাটিম স্ট্রিং সন্ধান করেন এবং আপনি নিশ্চিত হয়ে যেতে চান যে আপনি যে স্ট্রিংটি পেরিয়ে গেছেন তা ভারব্যাটিয়াম (অর্থাত্ বিন্দু বা প্রশ্ন চিহ্নকে অন্য কিছু হিসাবে ব্যাখ্যা করা হবে এমন ঝুঁকি ছাড়াই) fgrep বা egrep -F ব্যবহার করুন।
যেমন, এগ্রেপ এবং গ্রেপের মধ্যে পার্থক্য রয়েছে, আমি মনে করি যে এড্রেপ আপনার পছন্দসই জিনিসটির বেশিরভাগ সময়। জিএনইউ ম্যানুয়াল সাইটটি গ্রেপ এবং egrep এর মধ্যে পার্থক্যগুলি তালিকাভুক্ত করে যা সিনট্যাক্সের মধ্যে পড়ে বলে মনে হচ্ছে: কিছু জিনিসকে স্ল্যাশ দরকার হয় অন্যদিকে না। আমি মনে করি যে পার্ল রেগেক্সপস এবং জাভাস্ক্রিপ্ট রিজেক্সপ্সের সাথে এড্রেপ বেশি "সামঞ্জস্যপূর্ণ" তাই আমার কাছে এগ্রেপ ব্যবহার করা আরও সহজ।
BTW। আমি সত্যিই দিতে করার জন্য উত্সাহিত করি ACK ব্যবহার করে দেখুন - এটা PREGs সমর্থন করে, এবং আরো অনেক কিছু দরকারী অক্ষমতা (হয়েছে অর্থাত রং, .svn, symlinks অনুসরণ করার ক্ষমতা মত সম্ভবত নয়-কি-আপনি-চান ডিরেক্টরি কুঁদন, এবং এটি টাইপ করার একটি বিট আরো সহজ গ্রেপ-ই এর চেয়ে বেশি) k