المقدمة
يتم استخدام الأمر grep Linux كطريقة لتصفية الإدخال.
يرمز GREP إلى "طابعة التعبير العادية العالمية" ومن ثم لاستخدامها بشكل فعال ، يجب أن يكون لديك بعض المعرفة حول التعبيرات العادية.
في هذه المقالة ، سأوضح لك عددًا من الأمثلة التي ستساعدك على فهم أمر grep.
01 من 09
كيفية البحث عن سلسلة في ملف باستخدام GREP
تخيل أن لديك ملفًا نصيًا يسمى الكتب يحتوي على عناوين كتب الأطفال التالية:
- روبن هود
- القليل ركوب هود الأحمر
- بيتر بان
- المعتدل والدببة الثلاثة
- سنووايت و الأقزام السبعة
- Pinnochio
- القطة في القبعة
- الخنازير الثلاثة الصغيرة
- و Gruffalo
- تشارلي ومصنع الشوكولاتة
للعثور على جميع الكتب التي تحتوي على الكلمة "The" في العنوان ، يمكنك استخدام البنية التالية:
grep الكتب
سيتم إرجاع النتائج التالية:
- المعتدل والدببة الثلاثة
- سنووايت و الأقزام السبعة
- القطة في القبعة
- الخنازير الثلاثة الصغيرة
- و Gruffalo
- تشارلي ومصنع الشوكولاتة
في كل حالة ، سيتم تمييز الكلمة "The".
لاحظ أن البحث حساس لحالة الأحرف حتى إذا كان أحد العناوين يحتوي على "" بدلاً من "" ثم لن يكون قد تم إرجاعه.
لتجاهل الحالة ، يمكنك إضافة المفتاح التالي:
grep الكتب - حجرة-حالة
يمكنك أيضًا استخدام -i switch على النحو التالي:
grep -i الكتب
02 من 09
البحث عن سلسلة في ملف باستخدام أحرف البدل
الأمر grep قوي جدا. يمكنك استخدام العديد من أساليب مطابقة الأنماط لتصفية النتائج.
في هذا المثال ، سأوضح لك كيفية البحث عن سلسلة في ملف باستخدام أحرف البدل .
تخيل أن لديك ملفًا باسم الأماكن مع أسماء الأماكن الاسكتلندية التالية:
أبردين
أبريستوايث
aberlour
INVERURIE
إينفيرنيس
نيوبورغ
الغزلان الجديدة
غالواي الجديد
غلاسكو
أدنبرة
إذا كنت ترغب في العثور على جميع الأماكن مع 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
للعثور على جميع about.coms ، يمكنك البحث باستخدام البنية التالية:
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 '[AZ]' اسم الملف
تتيح الأقواس المربعة [] تحديد نطاق الأحرف. في المثال أعلاه ، يتطابق مع أي حرف بين A و Z.
لذلك ، لمطابقة الأحرف الصغيرة ، يمكنك استخدام بناء الجملة التالي:
grep '[az]' 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 فايرفوكس