ما هو GREP في Linux وكيف تستخدمه؟


Grep هو برنامج UNIX صغير للعثور على أنماط المطابقة. تم إصداره لأول مرة في V6 UNIX، ويمكنك الآن العثور عليه على أي نظام يشبه UNIX تقريبًا مثل Linux وmacOS وحتى BSD. في هذه المقالة، سأتناول أساسيات برنامج Grep وأعرض لك بعض الأمثلة عن كيفية استخدام البرنامج للمهام اليومية.

أساسيات استخدام Grep

يعد Grep في جوهره برنامجًا بسيطًا ومباشرًا. فهو يأخذ إدخالاً، ويبحث عن النص الذي تريده في هذا الإدخال، ويطبع المطابقات كمخرجات. يمكن لـ Grep معالجة أي مصدر نص عادي تقريبًا. وهذا يسمح له بقراءة المدخلات القادمة من الأوامر الأخرى والبحث في الملفات مباشرة.

إن أبسط طريقة لبدء استخدام Grep هي قراءة البيانات من ملف نصي. على سبيل المثال، يقوم الأمر التالي بطباعة محتوى ملف Sample.txt الخاص بي:

علاوة على ذلك، يمكنك استخدام هذه الميزة للبحث والعثور على أجزاء معينة من النص داخل ملفاتك النصية:

محطة تعرض ميزة مطابقة الكلمات البسيطة في Grep.

يمكنك أيضًا استخدام Grep مع أنابيب UNIX، مما يسمح لك بلصق برامج متعددة معًا في أمر واحد:

محطة تعرض Grep وهو يطبع الملف بأكمله عند التشغيل بدون أي وسائط.

من الجيد أن تعرف: هل تتطلع إلى توسيع معرفتك بنظام UNIX؟ تعرف على كيفية فحص عمل أجهزة الاستدعاء في Linux من خلال الاطلاع على ورقة الغش لدينا الخاصة بـ GNU أقل.

البحث عن الملفات في الدليل

إحدى أسهل المهام التي يمكنك القيام بها باستخدام Grep هي العثور على الملفات في قائمة الدليل. للقيام بذلك، يمكنك إرسال إخراج ls الأمر من خلال توجيه UNIX مباشرة إلى Grep.

سيقوم الأمر التالي بطباعة كافة الملفات الموجودة في مجلد التنزيلات الخاص بك وتمييزها بامتداد الملف .jpg:

ls ~/Downloads | grep \\.jpg
محطة تعرض قوائم ملفات تصفية Grep بناءً على امتداد الملف.

يمكنك أيضا إرسال أكثر تفصيلا ls الإخراج إلى Grep واستخدامه لمطابقة الأنماط. على سبيل المثال، يسرد ما يلي جميع الملفات الموجودة في الدليل بحجم ملف أقل من 1 ميغابايت:

محطة توضح قدرة Grep على مطابقة النص داخل نص أكبر حجمًا.

ننسى القضية

بشكل افتراضي، تكون جميع البرامج تقريبًا في نظام يشبه UNIX حساسة لحالة الأحرف. وهذا يعني أن النظام يتعامل مع السلسلة “Hello” بشكل مختلف عن “hello” و”hEllo” و”helLo”.

محطة تعرض سلوك Grep الافتراضي الحساس لحالة الأحرف.

يمكن أن يكون هذا السلوك مؤلمًا عند البحث عن سلاسل داخل الملفات. على سبيل المثال، يمكن أن تحتوي المقالة على كلمتي “Hello” و”hello” في نفس الوقت. لمعالجة هذه المشكلة، قم بتشغيل Grep باستخدام ملف -i علامة متبوعة بالسلسلة التي تريد البحث عنها.

محطة تعرض علامة -i التي تعمل على تعطيل حساسية حالة Grep.

عمليات البحث العودية

يمكن لـ Grep البحث في أكثر من ملف أو دليل في نفس الوقت. يعد هذا مفيدًا إذا كنت تعمل في مشروع يحتوي على ملفات متعددة وتريد معرفة مكان ظهور سلسلة نصية في الدليل. على سبيل المثال، يطابق الأمر التالي الكلمة “MakeTechEasier” الموجودة داخل دليل “sample”:

grep -r 'MakeTechEasier' ./sample
محطة توضح قدرة Grep على مطابقة ملفات متعددة في وقت واحد.

وقال ذلك باستخدام -r ستطالب العلامة أيضًا Grep بالبحث في كل ملف في الدليل الهدف. قد يمثل هذا مشكلة إذا كان لديك أيضًا ملفات غير نصية داخل المجلد الذي تبحث عنه. لمنع ذلك، قم بتشغيل Grep باستخدام ملف -I علَم:

grep -rI 'MakeTechEasier' ./sample

وفي ملاحظة جانبية: تعرف على كيفية إنشاء ملفات في الجهاز باستخدام أمر اللمس.

مطابقة الملفات التي تحتوي على سلسلة

بصرف النظر عن إظهار مكان حدوث سلسلة معينة في ملفات مختلفة، يمكنك أيضًا استخدام Grep لإنشاء قائمة بالملفات التي تحتوي على النص المستهدف. يعد هذا مفيدًا إذا كنت تريد معرفة ما إذا كان الملف يحتوي على سلسلة معينة ولكنك لا تريد أن يقوم Grep بطباعة كل مثيل له في الوحدة الطرفية.

للقيام بذلك، قم بتشغيل Grep باستخدام ملف -r و -l العلامات متبوعة بالسلسلة التي تريد مطابقتها والدليل الذي تريد الاطلاع عليه:

grep -rl MakeTechEasier ./sample
محطة تعرض Grep وهو يطبع المسارات النسبية للملفات التي تحتوي على السلسلة المستهدفة.

يمكنك أيضًا تضمين أمر Grep الخاص بك داخل غلاف فرعي Bash لإنشاء شروط متعددة لمطابقة النص الخاص بك. على سبيل المثال، سيعرض السطر التالي من التعليمات البرمجية فقط تلك الملفات التي تحتوي على كل من “Hello” و”MakeTechEasier” في مجلد “sample”:

grep -rl MakeTechEasier $(grep -rl Hello ./sample)
محطة تعرض Grep باستخدام أغلفة Bash الفرعية لإجراء مطابقة نصية متعددة الشروط.

ابحث عن العكس

وبصرف النظر عن إجراء عمليات البحث المباشرة، يمكن لـ Grep أيضًا إرجاع النتائج التي لا تتطابق مع معاييرك الأولية. على الرغم من أن الأمر قد يبدو غير بديهي في البداية، إلا أنه قد يكون مفيدًا في الحالات التي تحتاج فيها إلى تسليط الضوء على الأخطاء والشذوذات في إدخال النص.

للقيام بذلك، قم بتشغيل Grep مع -v بالإضافة إلى العلامات الأخرى التي تريد تمكينها. على سبيل المثال، سيبحث ما يلي بشكل متكرر في كل ملف في المجلد “/etc/nginx” الخاص بي ويعيد جميع الأسطر التي لا تحتوي على السلسلة “nginx”:

grep -rv 'nginx' /etc/nginx
محطة تعرض علامة Grep المقلوبة التي تطابق كل شيء ما عدا السلسلة المستهدفة.

الكلمات والخطوط

قد يكون من المفيد أيضًا أن تطلب من Grep البحث عن كلمات أو سطور كاملة، بدلاً من أي شيء يحتوي على نمط معين. يعد هذا مفيدًا إذا كنت تقوم بمطابقة سلسلة من الأحرف الشائعة في الكثير من الكلمات. على سبيل المثال، ستؤدي مطابقة الكلمة “it” إلى إرجاع الكثير من النتائج الإيجابية الخاطئة نظرًا لأن “it” عبارة عن سلسلة شائعة يمكنك العثور عليها في الكلمات.

لإصلاح ذلك، يمكنك تشغيل Grep باستخدام الملف -w علامة متبوعة بالكلمة التي تريد مطابقتها:

محطة تعرض العلامة المطابقة للكلمة بأكملها لـ Grep.

بدلاً من طباعة كل كلمة تحتوي على النمط، سيقوم Grep بطباعة الكلمة بمفردها فقط. يفعل نفس الشيء بالنسبة للخطوط بأكملها مع -x العلم، لذلك إذا كنت تبحث عن عبارة أو سطر واحد في ملف التكوين، فيمكن أن يساعدك ذلك حقًا.

محطة تُظهر مطابقة Grep لأسطر كاملة في السلسلة المستهدفة.

إضافة أرقام الأسطر إلى إخراج Grep

تعد أرقام الأسطر جزءًا مهمًا من برامج تصحيح الأخطاء وتصحيح النصوص. فهو يسمح لك بالإشارة بدقة إلى موقع وظيفة أو جملة معينة، مما يجعل عملية الإصلاح والتعديل أسرع كثيرًا.

في هذا الصدد، يأتي Grep مزودًا بالقدرة على طباعة أرقام الأسطر إلى مخرجاته الافتراضية. للقيام بذلك، قم بتشغيل البرنامج مع -n علامة متبوعة بالسلسلة التي تريد مطابقتها:

محطة تعرض Grep وهو يطبع رقم سطر السلسلة المستهدفة في ملف my-code.c.

بمساعدة أنابيب UNIX، يمكنك أيضًا تعديل مخرجات Grep وطباعة أرقام الأسطر فقط لما تبحث عنه. وهذا يجعل تحليل النصوص الكبيرة أكثر وضوحًا وأسهل:

grep -n Sed essay.txt | cut -f 1 -d :
محطة توضح أن Grep يستفيد من أنابيب UNIX لتجريد البيانات غير الضرورية قبل الطباعة إلى المحطة.

لعِلمِكَ: تعد أنابيب UNIX أكثر من مجرد أداة لـ Grep. تعرف على كيفية أتمتة مهام Shell البعيدة عن طريق إنشاء أنابيب SSH واستخدامها.

استخدام Regex الموسع مع Grep

يستخدم Grep مجموعة الأحرف الأولية للتعبير العادي الأساسي (BRE) لمطابقة السلاسل النصية وتصفيتها. على الرغم من أن هذا يعمل عادةً مع معظم المهام، إلا أن بعض المستخدمين قد يجدونه مقيدًا، خاصة عند العمل مع مجموعات الأنماط.

لمعالجة هذه المشكلة، توفر معظم تطبيقات Grep -E العلم، الذي يسمح للبرنامج بتحليل الأحرف الأولية للتعبير العادي الممتد (ERE). على سبيل المثال، الأمر التالي سوف يعمل فقط مع -E علَم:

printf "hello\nhellooooo\n" | grep -E .*o2$
محطة تعرض Grep باستخدام مجموعة الأحرف الأولية Extended Regex.

ملحوظة: يستخدم إصدار GNU من Grep بعض وظائف ERE بشكل افتراضي. ومع ذلك، فمن الممارسات الجيدة استخدامها -E كلما استخدمت ERE للحفاظ على التوافق مع الأنظمة الأخرى المشابهة لـ UNIX.

علاوة على ذلك، يمتلك Grep أيضًا وضعًا خاصًا يُسقط جميع وظائف Regex تمامًا. لاستخدام هذا، قم بتشغيل البرنامج مع -F علامة متبوعة بسلسلة عادية:

grep -F [MakeTechEasier] ./fixed.txt
محطة تعرض التطابق التام للسلسلة المستهدفة مع Grep's "لا ريكس" وضع.

إضافة خطوط متجاورة إلى مخرجات Grep

تتمثل إحدى نقاط القوة الأساسية في Grep في إظهار مكان ظهور النص في ملفك أو دفق الإدخال. ومع ذلك، هناك حالات لا يساعد فيها مجرد معرفة الموقع الدقيق للسلسلة عند استكشاف المشكلات وإصلاحها. على سبيل المثال، يوفر سجل الأعطال عادةً سياقًا إضافيًا قبل أن يطبع رسالة “خطأ التجزئة” التقليدية.

إحدى الطرق لحل هذه المشكلة هي تشغيل Grep مع ملف -C علامة متبوعة بكمية الأسطر التي تريد طباعتها حول النص المستهدف. يقوم الأمر التالي بطباعة خمسة أسطر قبل وبعد مطابقة النص:

grep -C 5 'Hello' ./hello-sample.txt
محطة توضح قدرة Grep على طباعة السياق المحيط بالسلسلة المستهدفة.

يمكنك أيضًا تخصيص ما إذا كان Grep يطبع فقط سياقات ما قبل المباراة أو ما بعد المباراة باستخدام الملف -B و -A أعلام. على سبيل المثال، سيقوم ما يلي بطباعة الأسطر العشرة السابقة بعد السلسلة المستهدفة:

grep -A 10 'Hello' ./hello-sample.txt
محطة تعرض Grep وهو يطبع الأسطر العشرة التالية بعد تطابق السلسلة الأولي.

مع أساسيات Grep وكيفية استخدامه لمهامك اليومية، يمكنك الآن اتخاذ خطوتك الأولى في فهم سطر الأوامر وأدوات UNIX الأساسية. اكتشف المزيد عن هذا العالم المتنوع والعميق من خلال تعلم كيفية عمل sed في Linux.

حقوق الصورة: أليخاندرو إسكاميلا عبر Unsplash. جميع التعديلات ولقطات الشاشة بواسطة Ramces Red.

اشترك في النشرة الإخبارية لدينا!

يتم تسليم أحدث البرامج التعليمية لدينا مباشرة إلى صندوق البريد الوارد الخاص بك

رمسيس الأحمر

رمسيس كاتب في مجال التكنولوجيا عاش مع أجهزة الكمبيوتر طوال حياته. قارئ غزير الإنتاج وطالب في الأنثروبولوجيا، وهو شخصية غريبة الأطوار تكتب مقالات عن Linux وأي شيء لا شيء.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى