ما هو GREP في Linux وكيف تستخدمه؟
Grep هو برنامج UNIX صغير للعثور على أنماط المطابقة. تم إصداره لأول مرة في V6 UNIX، ويمكنك الآن العثور عليه على أي نظام يشبه UNIX تقريبًا مثل Linux وmacOS وحتى BSD. في هذه المقالة، سأتناول أساسيات برنامج Grep وأعرض لك بعض الأمثلة عن كيفية استخدام البرنامج للمهام اليومية.
أساسيات استخدام Grep
يعد Grep في جوهره برنامجًا بسيطًا ومباشرًا. فهو يأخذ إدخالاً، ويبحث عن النص الذي تريده في هذا الإدخال، ويطبع المطابقات كمخرجات. يمكن لـ Grep معالجة أي مصدر نص عادي تقريبًا. وهذا يسمح له بقراءة المدخلات القادمة من الأوامر الأخرى والبحث في الملفات مباشرة.
إن أبسط طريقة لبدء استخدام Grep هي قراءة البيانات من ملف نصي. على سبيل المثال، يقوم الأمر التالي بطباعة محتوى ملف Sample.txt الخاص بي:
علاوة على ذلك، يمكنك استخدام هذه الميزة للبحث والعثور على أجزاء معينة من النص داخل ملفاتك النصية:
يمكنك أيضًا استخدام Grep مع أنابيب UNIX، مما يسمح لك بلصق برامج متعددة معًا في أمر واحد:
من الجيد أن تعرف: هل تتطلع إلى توسيع معرفتك بنظام UNIX؟ تعرف على كيفية فحص عمل أجهزة الاستدعاء في Linux من خلال الاطلاع على ورقة الغش لدينا الخاصة بـ GNU أقل.
البحث عن الملفات في الدليل
إحدى أسهل المهام التي يمكنك القيام بها باستخدام Grep هي العثور على الملفات في قائمة الدليل. للقيام بذلك، يمكنك إرسال إخراج ls
الأمر من خلال توجيه UNIX مباشرة إلى Grep.
سيقوم الأمر التالي بطباعة كافة الملفات الموجودة في مجلد التنزيلات الخاص بك وتمييزها بامتداد الملف .jpg:
ls ~/Downloads | grep \\.jpg
يمكنك أيضا إرسال أكثر تفصيلا ls
الإخراج إلى Grep واستخدامه لمطابقة الأنماط. على سبيل المثال، يسرد ما يلي جميع الملفات الموجودة في الدليل بحجم ملف أقل من 1 ميغابايت:
ننسى القضية
بشكل افتراضي، تكون جميع البرامج تقريبًا في نظام يشبه UNIX حساسة لحالة الأحرف. وهذا يعني أن النظام يتعامل مع السلسلة “Hello” بشكل مختلف عن “hello” و”hEllo” و”helLo”.
يمكن أن يكون هذا السلوك مؤلمًا عند البحث عن سلاسل داخل الملفات. على سبيل المثال، يمكن أن تحتوي المقالة على كلمتي “Hello” و”hello” في نفس الوقت. لمعالجة هذه المشكلة، قم بتشغيل Grep باستخدام ملف -i
علامة متبوعة بالسلسلة التي تريد البحث عنها.
عمليات البحث العودية
يمكن لـ Grep البحث في أكثر من ملف أو دليل في نفس الوقت. يعد هذا مفيدًا إذا كنت تعمل في مشروع يحتوي على ملفات متعددة وتريد معرفة مكان ظهور سلسلة نصية في الدليل. على سبيل المثال، يطابق الأمر التالي الكلمة “MakeTechEasier” الموجودة داخل دليل “sample”:
grep -r 'MakeTechEasier' ./sample
وقال ذلك باستخدام -r
ستطالب العلامة أيضًا Grep بالبحث في كل ملف في الدليل الهدف. قد يمثل هذا مشكلة إذا كان لديك أيضًا ملفات غير نصية داخل المجلد الذي تبحث عنه. لمنع ذلك، قم بتشغيل Grep باستخدام ملف -I
علَم:
grep -rI 'MakeTechEasier' ./sample
وفي ملاحظة جانبية: تعرف على كيفية إنشاء ملفات في الجهاز باستخدام أمر اللمس.
مطابقة الملفات التي تحتوي على سلسلة
بصرف النظر عن إظهار مكان حدوث سلسلة معينة في ملفات مختلفة، يمكنك أيضًا استخدام Grep لإنشاء قائمة بالملفات التي تحتوي على النص المستهدف. يعد هذا مفيدًا إذا كنت تريد معرفة ما إذا كان الملف يحتوي على سلسلة معينة ولكنك لا تريد أن يقوم Grep بطباعة كل مثيل له في الوحدة الطرفية.
للقيام بذلك، قم بتشغيل Grep باستخدام ملف -r
و -l
العلامات متبوعة بالسلسلة التي تريد مطابقتها والدليل الذي تريد الاطلاع عليه:
grep -rl MakeTechEasier ./sample
يمكنك أيضًا تضمين أمر Grep الخاص بك داخل غلاف فرعي Bash لإنشاء شروط متعددة لمطابقة النص الخاص بك. على سبيل المثال، سيعرض السطر التالي من التعليمات البرمجية فقط تلك الملفات التي تحتوي على كل من “Hello” و”MakeTechEasier” في مجلد “sample”:
grep -rl MakeTechEasier $(grep -rl Hello ./sample)
ابحث عن العكس
وبصرف النظر عن إجراء عمليات البحث المباشرة، يمكن لـ Grep أيضًا إرجاع النتائج التي لا تتطابق مع معاييرك الأولية. على الرغم من أن الأمر قد يبدو غير بديهي في البداية، إلا أنه قد يكون مفيدًا في الحالات التي تحتاج فيها إلى تسليط الضوء على الأخطاء والشذوذات في إدخال النص.
للقيام بذلك، قم بتشغيل Grep مع -v
بالإضافة إلى العلامات الأخرى التي تريد تمكينها. على سبيل المثال، سيبحث ما يلي بشكل متكرر في كل ملف في المجلد “/etc/nginx” الخاص بي ويعيد جميع الأسطر التي لا تحتوي على السلسلة “nginx”:
grep -rv 'nginx' /etc/nginx
الكلمات والخطوط
قد يكون من المفيد أيضًا أن تطلب من Grep البحث عن كلمات أو سطور كاملة، بدلاً من أي شيء يحتوي على نمط معين. يعد هذا مفيدًا إذا كنت تقوم بمطابقة سلسلة من الأحرف الشائعة في الكثير من الكلمات. على سبيل المثال، ستؤدي مطابقة الكلمة “it” إلى إرجاع الكثير من النتائج الإيجابية الخاطئة نظرًا لأن “it” عبارة عن سلسلة شائعة يمكنك العثور عليها في الكلمات.
لإصلاح ذلك، يمكنك تشغيل Grep باستخدام الملف -w
علامة متبوعة بالكلمة التي تريد مطابقتها:
بدلاً من طباعة كل كلمة تحتوي على النمط، سيقوم Grep بطباعة الكلمة بمفردها فقط. يفعل نفس الشيء بالنسبة للخطوط بأكملها مع -x
العلم، لذلك إذا كنت تبحث عن عبارة أو سطر واحد في ملف التكوين، فيمكن أن يساعدك ذلك حقًا.
إضافة أرقام الأسطر إلى إخراج Grep
تعد أرقام الأسطر جزءًا مهمًا من برامج تصحيح الأخطاء وتصحيح النصوص. فهو يسمح لك بالإشارة بدقة إلى موقع وظيفة أو جملة معينة، مما يجعل عملية الإصلاح والتعديل أسرع كثيرًا.
في هذا الصدد، يأتي Grep مزودًا بالقدرة على طباعة أرقام الأسطر إلى مخرجاته الافتراضية. للقيام بذلك، قم بتشغيل البرنامج مع -n
علامة متبوعة بالسلسلة التي تريد مطابقتها:
بمساعدة أنابيب UNIX، يمكنك أيضًا تعديل مخرجات Grep وطباعة أرقام الأسطر فقط لما تبحث عنه. وهذا يجعل تحليل النصوص الكبيرة أكثر وضوحًا وأسهل:
grep -n Sed essay.txt | cut -f 1 -d :
لعِلمِكَ: تعد أنابيب UNIX أكثر من مجرد أداة لـ Grep. تعرف على كيفية أتمتة مهام Shell البعيدة عن طريق إنشاء أنابيب SSH واستخدامها.
استخدام Regex الموسع مع Grep
يستخدم Grep مجموعة الأحرف الأولية للتعبير العادي الأساسي (BRE) لمطابقة السلاسل النصية وتصفيتها. على الرغم من أن هذا يعمل عادةً مع معظم المهام، إلا أن بعض المستخدمين قد يجدونه مقيدًا، خاصة عند العمل مع مجموعات الأنماط.
لمعالجة هذه المشكلة، توفر معظم تطبيقات Grep -E
العلم، الذي يسمح للبرنامج بتحليل الأحرف الأولية للتعبير العادي الممتد (ERE). على سبيل المثال، الأمر التالي سوف يعمل فقط مع -E
علَم:
printf "hello\nhellooooo\n" | grep -E .*o2$
ملحوظة: يستخدم إصدار GNU من Grep بعض وظائف ERE بشكل افتراضي. ومع ذلك، فمن الممارسات الجيدة استخدامها -E
كلما استخدمت ERE للحفاظ على التوافق مع الأنظمة الأخرى المشابهة لـ UNIX.
علاوة على ذلك، يمتلك Grep أيضًا وضعًا خاصًا يُسقط جميع وظائف Regex تمامًا. لاستخدام هذا، قم بتشغيل البرنامج مع -F
علامة متبوعة بسلسلة عادية:
grep -F [MakeTechEasier] ./fixed.txt
إضافة خطوط متجاورة إلى مخرجات Grep
تتمثل إحدى نقاط القوة الأساسية في Grep في إظهار مكان ظهور النص في ملفك أو دفق الإدخال. ومع ذلك، هناك حالات لا يساعد فيها مجرد معرفة الموقع الدقيق للسلسلة عند استكشاف المشكلات وإصلاحها. على سبيل المثال، يوفر سجل الأعطال عادةً سياقًا إضافيًا قبل أن يطبع رسالة “خطأ التجزئة” التقليدية.
إحدى الطرق لحل هذه المشكلة هي تشغيل Grep مع ملف -C
علامة متبوعة بكمية الأسطر التي تريد طباعتها حول النص المستهدف. يقوم الأمر التالي بطباعة خمسة أسطر قبل وبعد مطابقة النص:
grep -C 5 'Hello' ./hello-sample.txt
يمكنك أيضًا تخصيص ما إذا كان Grep يطبع فقط سياقات ما قبل المباراة أو ما بعد المباراة باستخدام الملف -B
و -A
أعلام. على سبيل المثال، سيقوم ما يلي بطباعة الأسطر العشرة السابقة بعد السلسلة المستهدفة:
grep -A 10 'Hello' ./hello-sample.txt
مع أساسيات Grep وكيفية استخدامه لمهامك اليومية، يمكنك الآن اتخاذ خطوتك الأولى في فهم سطر الأوامر وأدوات UNIX الأساسية. اكتشف المزيد عن هذا العالم المتنوع والعميق من خلال تعلم كيفية عمل sed في Linux.
حقوق الصورة: أليخاندرو إسكاميلا عبر Unsplash. جميع التعديلات ولقطات الشاشة بواسطة Ramces Red.
اشترك في النشرة الإخبارية لدينا!
يتم تسليم أحدث البرامج التعليمية لدينا مباشرة إلى صندوق البريد الوارد الخاص بك
اكتشاف المزيد من تكتك تكنولوجيا
اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.