يتم استخدام الأمر grep Linux كطريقة لتصفية الإدخال. يرمز GREP إلى "طابعة التعبير العادية العالمية" ومن ثم لاستخدامها بشكل فعال ، يجب أن يكون لديك بعض المعرفة حول التعبيرات العادية.
في هذه المقالة ، ستتعلم عددًا من الأمثلة التي ستساعدك على فهم أمر grep.
01 من 09كيفية البحث عن سلسلة في ملف باستخدام GREP
تخيل أن لديك ملفًا نصيًا يسمى الكتب يحتوي على عناوين كتب الأطفال التالية:
- روبن هود
- القليل ركوب هود الأحمر
- بيتر بان
- المعتدل والدببة الثلاثة
- سنووايت و الأقزام السبعة
- Pinnochio
- القطة في القبعة
- الخنازير الثلاثة الصغيرة
- و Gruffalo
- تشارلي ومصنع الشوكولاتة
للعثور على جميع الكتب التي تحتوي على الكلمة "The" في العنوان ، يمكنك استخدام البنية التالية:
grep الكتبسيتم إرجاع النتائج التالية:
- المعتدل والدببة الثلاثة
- سنووايت و الأقزام السبعة
- القطة في القبعة
- الخنازير الثلاثة الصغيرة
- و Gruffalo
- تشارلي ومصنع الشوكولاتة
في كل حالة ، سيتم تمييز الكلمة "The".
يعتبر البحث حساسًا لحالة الأحرف ، لذلك إذا كان أحد العناوين يحمل "بدلاً من" "ثم" ، فلن تتم إعادته.
لتجاهل الحالة ، يمكنك إضافة المفتاح التالي:
grep الكتب - حجرة-حالةيمكنك أيضًا استخدام -i switch على النحو التالي:
مواصلة القراءة أدناه
02 من 09البحث عن سلسلة في ملف باستخدام أحرف البدل
الأمر grep قوي جدا. يمكنك استخدام العديد من أساليب مطابقة الأنماط لتصفية النتائج.
في هذا المثال ، سأوضح لك كيفية البحث عن سلسلة في ملف باستخدام أحرف البدل.
تخيل أن لديك ملفًا باسم الأماكن مع أسماء الأماكن الاسكتلندية التالية:
أبردينأبريستوايثaberlourINVERURIEإينفيرنيسنيوبورغالغزلان الجديدةغالواي الجديدغلاسكوأدنبرةإذا كنت ترغب في العثور على جميع الأماكن مع inver في الاسم استخدم بناء الجملة التالي:
grep inver * placesتقف العلامة النجمية (*) على 0 أو أكثر. لذلك إذا كان لديك مكان يسمى inver أو مكان يسمى Inverness ، فسيتم إرجاع كليهما.
آخر حرف بدل يمكنك استخدامه هو الفترة (.). يمكنك استخدام هذا لمطابقة حرف واحد.
grep inver.r placesسيجد الأمر أعلاه أماكن تسمى inverurie و inverary ولكن لن يجد invereerie لأنه لا يمكن أن يكون هناك سوى حرف بدل واحد بين الحرفين r كما هو محدد بواسطة الفترة المفردة.
تعد أحرف البدل مفيدة ، ولكنها قد تسبب مشكلات إذا كان لديك جزء من النص الذي تبحث عنه.
على سبيل المثال ، انظر إلى قائمة أسماء النطاقات هذه
- linux.about.com
- pcsupport.about.com
- mp3.about.com
- minecraft.about.com
- androidgames.about.com
- netforbeginners.about.com
- everydaylinuxuser.com
- google.co.uk
- google.au
- direct.gov.uk
للعثور على كل ما يتعلق بـ. com ، يمكنك البحث باستخدام البنية التالية:
grep * about * domainnamesسيسقط الأمر السابق إذا كانت القائمة تحتوي على الاسم التالي:
- everydaylinuxuser.com/about.html
لذلك ، يمكنك تجربة بناء الجملة التالي:
grep * about.com domainnamesسيعمل هذا على ما يرام ما لم يكن هناك مجال بالاسم التالي:
aboutycom.comللبحث حقًا عن عبارة about.com ، ستحتاج إلى الهروب من النقطة على النحو التالي:
grep * حول .com domainnamesإن البدل الأخير الذي سيظهر لك هو علامة الاستفهام التي تشير إلى صفر أو حرف واحد.
فمثلا:
grep؟ ber placenamesسيعود الأمر أعلاه aberdeen ، aberystwyth أو حتى berwick.
مواصلة القراءة أدناه
03 من 09البحث عن سلاسل في بداية ونهاية الخط باستخدام grep
يسمح لك قيراط (^) ورمز الدولار ($) بالبحث عن الأنماط في بداية ونهاية الأسطر.
تخيل أن لديك ملفًا باسم كرة القدم يحمل أسماء الفرق التالية:
- بلاكبول
- ليفربول
- مدينة مانشستر
- مدينة ليستر
- مانشستر يونايتد
- نيوكاسل المتحدة
- FC يونايتد اوف مانشستر
إذا أردت العثور على جميع الفرق التي بدأت مع مانشستر ، فستستخدم الصيغة التالية:
grep ^ فرق مانشسترسيعود الأمر أعلاه إلى مانشستر سيتي ومانشستر يونايتد ولكن ليس مانشستر يونايتد.
بدلاً من ذلك ، يمكنك العثور على جميع الفرق المنتهية بـ United باستخدام الصيغة التالية:
grep فرق دولارسيعود الأمر السابق إلى مانشستر يونايتد ونيوكاسل يونايتد ولكن ليس مانشستر يونايتد.
04 من 09حساب عدد المباريات باستخدام grep
إذا كنت لا ترغب في إرجاع الخطوط الفعلية التي تطابق نمط باستخدام grep ولكنك تريد فقط معرفة عدد هناك يمكنك استخدام بناء الجملة التالي:
grep - ج نمط المدخلاتإذا تمت مطابقة النمط مرتين ، فسيتم إرجاع الرقم 2.
مواصلة القراءة أدناه
05 من 09العثور على جميع الشروط التي لا تتطابق باستخدام grep
تخيل أن لديك قائمة بأسماء الأماكن مع البلدان المدرجة على النحو التالي:
- ابردين اسكتلندا
- غلاسكو اسكتلندا
- ليفربول إنجلترا
- خليج كولوين
- لندن، إنجلترا
ربما لاحظت أن خليج كولوين لا يوجد بلد مرتبط به.
للبحث عن جميع الأماكن في بلد ما ، يمكنك استخدام بناء الجملة التالي:
grep land $ placesسوف تكون نتائج إرجاع جميع الأماكن باستثناء خليج كولوين.
من الواضح أن هذا يعمل فقط للأماكن التي تنتهي في الأرض (بالكاد العلمية).
يمكنك عكس التحديد باستخدام الصيغة التالية:
grep -v land $ placesهذا سيجد كل الأماكن التي لم تنته بالأرض.
06 من 09كيفية البحث عن الخطوط الفارغة في الملفات باستخدام grep
تخيل أن لديك ملف إدخال يتم استخدامه بواسطة تطبيق جهة خارجية يتوقف عن قراءة الملف عندما يجد سطرًا فارغًا كما يلي:
- ابردين اسكوتلاند
- إينفيرنيس اسكتلندا
- ليفربول إنجلترا
- كولوين خليج ويلز
عندما يحصل التطبيق على الخط بعد ليفربول سيتوقف عن القراءة بمعنى أن يكون غاب خليج كولوين بالكامل.
يمكنك استخدام grep للبحث عن أسطر فارغة باستخدام بناء الجملة التالي:
grep ^ $ placesللأسف ، هذا ليس مفيدًا على وجه الخصوص نظرًا لأنه يعرض السطور الفارغة فقط.
يمكنك بالطبع الحصول على عدد من الخطوط الفارغة كتحقق لمعرفة ما إذا كان الملف صالحًا على النحو التالي:
grep -c ^ $ placesومع ذلك ، سيكون من الأكثر فائدة معرفة أرقام الأسطر التي تحتوي على سطر فارغ بحيث يمكنك استبدالها. يمكنك القيام بذلك باستخدام الأمر التالي:
grep -n ^ $ placesمواصلة القراءة أدناه
07 من 09كيفية البحث عن سلاسل من الأحرف الكبيرة أو الأحرف الصغيرة باستخدام grep
باستخدام grep ، يمكنك تحديد أي أسطر في ملف تحتوي على أحرف كبيرة باستخدام بناء الجملة التالي:
grep 'A-Z' filenameتتيح الأقواس المربعة تحديد نطاق الأحرف. في المثال أعلاه ، يتطابق مع أي حرف بين A و Z.
لذلك ، لمطابقة الأحرف الصغيرة ، يمكنك استخدام بناء الجملة التالي:
grep 'a-z' filenameإذا كنت تريد مطابقة الحروف فقط وليس الأرقام أو الرموز الأخرى ، فيمكنك استخدام البنية التالية:
grep 'a-zA-Z' filenameيمكنك أن تفعل الشيء نفسه مع الأرقام على النحو التالي:
grep '0-9' filename 08 من 09أبحث عن أنماط تكرار باستخدام grep
يمكنك استخدام الأقواس المتعرجة {} للبحث عن نمط متكرر.
تخيل أن لديك ملفًا به أرقام هواتف كما يلي:
- 055-1234
- 055-4567
- 555-1545
- 444-0167
- 444-0854
- 4549-2234
- x44-1234
أنت تعلم أن الجزء الأول من الرقم يجب أن يتكون من ثلاثة أرقام وتريد أن تجد الخطوط التي لا تطابق هذا النمط.
من المثال السابق ، تعلم أن 0-9 تقوم بإرجاع كافة الأرقام في ملف.
في هذه الحالة ، نريد أن تبدأ الأسطر التي تبدأ بثلاثة أرقام متبوعة بواصلة (-). يمكنك القيام بذلك باستخدام الصيغة التالية:
grep "^ 0-9 0-9 0-9 -" الأرقاموكما نعرف من الأمثلة السابقة ، فإن قيراط (^) يعني أن الخط يجب أن يبدأ بالنمط التالي.
ستقوم 0-9 بالبحث عن أي رقم بين 0 و 9. بما أنه يتم تضمينه ثلاث مرات فإنه يتطابق مع 3 أرقام. وأخيراً هناك واصلة للدلالة على أن الواصلة يجب أن تنجح في الأرقام الثلاثة.
باستخدام الأقواس المتعرجة ، يمكنك جعل البحث أصغر كما يلي:
grep "^ 0-9 {3 } -" الأرقامتفلت الشرطة من {القوس بحيث يعمل كجزء من التعبير المعتاد ، ولكن ما يقوله هذا هو 0-9 {3} وهو ما يعني أي رقم بين 0 و 9 ثلاث مرات.
يمكن استخدام الأقواس المتعرجة كما يلي:
{5,10}{5,}يعني الرقم {5،10} أن الحرف الذي يتم البحث عنه يجب أن يتكرر 5 مرات على الأقل ولكن لا يزيد عن 10 بينما يعني {5}} أنه يجب تكرار الحرف 5 مرات على الأقل ولكن يمكن أن يكون أكثر من ذلك.
مواصلة القراءة أدناه
09 من 09استخدام الإخراج من أوامر أخرى باستخدام grep
حتى الآن نظرنا إلى تطابق النمط داخل الملفات الفردية ولكن grep يمكن استخدام الإخراج من الأوامر الأخرى كمدخل لمطابقة النمط.
مثال عظيم على ذلك هو استخدام الأمر ps الذي يسرد العمليات النشطة.
على سبيل المثال ، قم بتشغيل الأمر التالي:
صسيتم عرض جميع العمليات الجارية على نظامك.
يمكنك استخدام grep للبحث عن عملية قيد التشغيل على النحو التالي:
ps -ef | grep فايرفوكسملخص
الأمر grep هو أمر أساسي في Linux وهو أمر يستحق التعلم لأنه سيجعل حياتك أسهل بكثير عند البحث عن الملفات والعمليات عند استخدام الجهاز.