الفرق بين أوامر grep و egrep و fgrep في أنظمة التشغيل Unix و Linux
تعتبر الأوامر grep و egrep و fgrep من الأدوات الشائعة في أنظمة التشغيل Unix و Linux، والتي تُستخدم للبحث عن نصوص معينة داخل الملفات أو تدفقات البيانات. تُعد هذه الأدوات من الأساسيات التي يعتمد عليها العديد من محترفي التقنية، مديري الأنظمة، والمطورين في مهام البحث النصي وتحليل البيانات. بالرغم من التشابه الكبير بين هذه الأوامر، إلا أن كل واحد منها يمتلك خصائص واستخدامات مختلفة. في هذا المقال، سنتناول الفروق الجوهرية بين الأوامر grep و egrep و fgrep بشكل مفصل، مع تسليط الضوء على كيفية استخدامها بشكل صحيح وأمثل.
أولاً: الأمر grep
الأمر grep هو اختصار لعبارة “Global Regular Expression Print”، ويستخدم للبحث عن أنماط نصية محددة داخل ملف أو مجموعة من الملفات. يعتمد grep على تعبيرات منتظمة (Regular Expressions) لتمكين المستخدم من البحث عن أنماط معقدة ومرنة داخل النصوص. يعتبر grep من أكثر الأوامر استخدامًا في بيئات Unix و Linux نظرًا لقوته ومرونته.
كيفية استخدام الأمر grep
يتم تنفيذ الأمر grep مع وجود تعبير منتظم (Regular Expression) كوسيلة لتحديد النصوص التي يرغب المستخدم في البحث عنها. على سبيل المثال، يمكن البحث عن كلمة معينة داخل ملف باستخدام الأمر التالي:
bashgrep "pattern" filename
حيث:
-
"pattern"هو النص أو التعبير المنتظم الذي تبحث عنه. -
filenameهو اسم الملف الذي يحتوي على النصوص.
يتم إرجاع جميع الأسطر التي تحتوي على النص المطلوب من داخل الملف.
مثال على استخدام grep
bashgrep "error" logfile.txt
هذا الأمر سيبحث عن الكلمة “error” داخل الملف logfile.txt ويطبع جميع الأسطر التي تحتوي على هذه الكلمة.
خيارات grep الرئيسية:
-
-i: تجاهل حالة الأحرف (أي أن البحث غير حساس لحالة الأحرف). -
-v: عكس البحث، أي طباعة الأسطر التي لا تحتوي على النمط المطلوب. -
-r: البحث بشكل متكرر داخل الأدلة والمجلدات. -
-l: طباعة أسماء الملفات التي تحتوي على النمط المطلوب.
ثانياً: الأمر egrep
يعتبر egrep نسخة موسعة من الأمر grep، حيث يمكنه دعم التعبيرات المنتظمة الممتدة (Extended Regular Expressions). يتيح ذلك للمستخدم استخدام ميزات إضافية في التعبيرات المنتظمة مثل الأقواس المربعة [] التي تدعم خيارات أكثر، مثل استخدام الرمز +، ?، أو | (التعبير البديل). بشكل عام، يعتبر egrep أكثر مرونة في التعامل مع الأنماط المعقدة مقارنة بـ grep العادي.
كيفية استخدام الأمر egrep
يتم استخدام egrep بنفس طريقة استخدام grep ولكن مع إمكانية استخدام التعبيرات المنتظمة الممتدة. مثال:
bashegrep "pattern" filename
مثال على استخدام egrep
bashegrep "error|failure" logfile.txt
هذا الأمر سيبحث عن الكلمتين “error” أو “failure” داخل الملف logfile.txt باستخدام تعبير منتظم موسع.
الاختلافات بين grep و egrep:
-
في
grep، لا يمكنك استخدام التعبيرات المنتظمة الممتدة مثل+أو?أو|إلا إذا كنت تستخدم الخيار-E. -
في
egrep، هذه الرموز متاحة بشكل افتراضي، مما يسهل كتابة تعبيرات منتظمة معقدة.
ثالثاً: الأمر fgrep
الأمر fgrep هو اختصار لعبارة “Fixed GREP”، ويُستخدم للبحث عن نصوص ثابتة بدلاً من التعبيرات المنتظمة. الفرق الأساسي بين fgrep و grep هو أن fgrep لا يفسر أي أحرف خاصة مثل * أو . أو [] أو غيرها كعناصر تعبيرة منتظمة، بل يعاملها ببساطة على أنها نصوص حرفية.
كيفية استخدام الأمر fgrep
تُستخدم fgrep عندما ترغب في البحث عن نصوص دقيقة تمامًا دون الحاجة للقلق بشأن التأثيرات الخاصة لأحرف التعبيرات المنتظمة. مثلاً:
bashfgrep "pattern" filename
مثال على استخدام fgrep
bashfgrep "error*" logfile.txt
هذا الأمر سيبحث عن الكلمة “error*” كما هي داخل الملف logfile.txt دون تفسير النجمة (*) كرمز تعبيري منتظم.
الفروق بين fgrep و grep
-
fgrepيعامل جميع الأحرف كحروف ثابتة، بينماgrepيعامل بعض الحروف كرموز للتعبيرات المنتظمة. -
لا يتطلب
fgrepخيارًا إضافيًا لاستخدام البحث النصي الثابت، حيث يتم التعامل مع جميع النصوص كما هي دون تفسير.
مقارنة بين الأوامر grep و egrep و fgrep
| السمة | grep |
egrep |
fgrep |
|---|---|---|---|
| نوع التعبير | يدعم التعبيرات المنتظمة (Regular Expressions) | يدعم التعبيرات المنتظمة الممتدة (Extended Regular Expressions) | يدعم النصوص الثابتة فقط (Fixed Strings) |
| الأحرف الخاصة | يعتمد على الأحرف الخاصة مثل * و . و [] في التعبيرات المنتظمة |
يدعم الأحرف الخاصة مثل + و ? و ` |
` بدون الحاجة إلى خيارات إضافية |
| الاستخدام الأمثل | البحث عن أنماط معقدة مع بعض الصعوبة في كتابة التعبيرات المنتظمة المعقدة | البحث عن أنماط معقدة بسهولة بفضل دعم التعبيرات المنتظمة الممتدة | البحث عن نصوص ثابتة بدون تفسير للأحرف الخاصة |
خلاصة
تعد أوامر grep و egrep و fgrep من الأدوات الأساسية في أنظمة Unix و Linux التي يستخدمها المحترفون للبحث عن نصوص معينة داخل الملفات. الفارق الرئيسي بين هذه الأوامر يكمن في كيفية تعاملها مع التعبيرات المنتظمة والأحرف الخاصة:
-
grepمناسب للبحث باستخدام تعبيرات منتظمة قياسية. -
egrepأكثر مرونة ويتيح لك استخدام تعبيرات منتظمة موسعة بسهولة. -
fgrepيستخدم للبحث عن نصوص ثابتة دون تفسير أي أحرف خاصة.
اختيار الأمر المناسب يعتمد بشكل أساسي على طبيعة البحث الذي ترغب في تنفيذه.

