egrep: أمثلة الأوامر في جنو / لينكس

com.egrep

البقرى إنها واحدة من أكثر الأدوات استخدامًا في سطر أوامر جنو / لينكس. على الرغم من كونها أداة بسيطة للغاية ، إلا أنها تتيح لك إجراء عدد كبير من العمليات. يتم استخدامه بشكل خاص مع الأنابيب ، لتتمكن من تحديد نقاط معينة في إخراج أمر سابق ، إلخ. ولكن هناك أيضًا أداة تُعرف باسم egrep والتي تعادل تشغيل grep مع الخيار -E.

يأتي الحرف e من "Extended regex" ، وهو ما ينشط الخيار -E وما لديك في egrep افتراضيًا دون استخدام هذا الخيار. أي يمكنك استخدام ملف التعبيرات العادية الممتدة. في هذا البرنامج التعليمي لن أخوض في شرح ما هي التعبيرات العادية ، وكيف يمكن استخدامها وما هي الأنواع الموجودة في * لا شيء. سأعرض فقط أمثلة عملية لبعض الأشياء المفيدة التي يمكنك القيام بها باستخدام egrep ...

grep و egrep و fgrep متشابهة. في الواقع ، egrep يعادل grep -E و fgrep يعادل grep -F. وهذا هو ، في الحالة التي تهمنا ، سوف يفسر أيضًا الأنماط على أنها تعبيرات منتظمة.

أنت ابحث عن سطر أو كلمة في ملف واحد أو أكثر ، كما هو الحال أيضًا مع grep. على سبيل المثال ، افترض أنك تريد البحث عن كلمة ubuntu في ملف يسمى snap.txt وأيضًا في جميع ملفات .txt في الدليل الحالي:

egrep ubuntu snap.txt

egrep ubuntu *.txt

يمكن أن يكون البحث أيضًا العودية للبحث في محتويات الدليل الحالي بالكامل:

egrep -r "hola mundo" *

حتى الآن ، تم البحث عن الكلمات أو السلاسل الدقيقة ، أي مع مراعاة الأحرف الكبيرة والصغيرة (حساسة لحالة الأحرف) ، ولكن إذا كنت تريد القيام بذلك في الوضع غير الحساس لحالة الأحرف ، بغض النظر عما إذا كانت كبيرة أو صغيرة، يمكنك استخدام ما يلي (إذا أضفت w فستجد التطابقات الكاملة فقط):

egrep -i "ejemplo" documento.txt

egrep -iw "ejemplo" documento.txt

تظهر ، وليس الصدف ، ولكن أسماء الملفات التي تم العثور على تلك التطابقات فيها:

egrep -l hola *.txt

اعرض فقط النمط أو الكلمة بحثت داخل مستند:

egrep -o printf hola.c

تذكر أنه يمكنك استخدام كل الاحتمالات التي يمكنك تخيلها. يمكنك دمج العديد من الخيارات التي سبق رؤيتها ، أو يمكنك استكمالها بخيارات أخرى مثل -A n و -B n ، حيث n عدد الأسطر التي تريد إظهارها قبل (قبل) وبعد (بعد) من المباراة أو كليهما في نفس الوقت (C) ، بحيث يمكنك رؤية ما يحيط بالمباراة:

egrep -A 2 "printf" hola.c

egrep -B 2 "printf" hola.c

egrep -C 2 printf hola.c

قم بإلغاء الأسطر التي تحتوي على تطابق واعرض فقط الأسطر غير المتطابقة:

egrep -v "dos" números.doc

أو إذا كنت تفضل ذلك ، يمكنك استخدام عدة كلمات أو تطابق مع -e. على سبيل المثال:

egrep -v -e "uno" -e "dos" -e "tres" números.txt

إذا كنت تستخدم -c يمكنه حساب عدد المطابقات فقط، أو اقلبها باستخدام -v لإظهار عدد الأسطر غير المتطابقة. فمثلا:

egrep -c "include" main.c

egrep -v -c "include" main.c

وحتى عرض رقم الخط حيث حدثت المباراة ، وكذلك المركز الذي تحتله على التوالي:

egrep -n "void" hola.c

egrep -o -b "printf" hola.c

وجنبا إلى جنب مع التعبيرات العادية يمكن توسيع قدراتها. على سبيل المثال ، ابحث عن سطر يبدأ بـ Hello وينتهي بـ bye ، أو يبدأ بـ Hello متبوعًا بأي شيء ، ثم تظهر مطابقة bye على التوالي:

* تصحيح الأمر التالي: بفضل تعليق القارئ Manuel Alcocer تمكنت من تعديل الأمر التالي ، حيث حدث خطأ.

egrep '^Hola.*adiós$' ejemplo.txt

egrep "Hola.*adiós" ejemplo.txt

ولكن إذا كنت تتساءل عن الاختلاف مع grep ، فإليك مثال يوضح لك ذلك ... في حالة استخدام grep بدون -E يجب عليك استخدام تسلسلات الهروب بحيث يفسر الأحرف الخاصة على هذا النحو ، وإلا فإنه يفسر النمط على هذا النحو دون أخذها في الاعتبار. من ناحية أخرى ، مع egrep أو grep -E سيأخذها في الاعتبار. فمثلا:
grep '^no\(fork\|group\)' /etc/group

هذا من شأنه أن يعادل:

grep -E '^no(fork|group)' /etc/group
egrep '^no(fork|group)' /etc/group

أي أنه سيبحث عن الأسطر المطابقة التي تبدأ بـ nofork أو nogroup. ولكن إذا استخدمت تعبير grep الأول بدون تسلسل الهروب ، فإن ما سيفعله هو البحث النمط الملموس لا (شوكة | مجموعة):

grep 'no(fork|group)' /etc/group

يمكنك أيضا البحث نطاقات أبجدية رقمية، أو قيم محددة ، مثل تحديد موقع عناوين IP معينة:
cat /etc/networks | egrep "192.168.1.[5-9]"
cat /etc/networks | egrep "192.168.[1-3].[5-9]"
cat /etc/networks | egrep "192.168.1.[0-3]|[5-9]"
egrep 192.168.4.[10,40] networks

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

egrep -i '^(printf|scanf)' hola.c

يمكنك حتى تحديد موقع الأحرف الكبيرة أو الصغيرة أو الأبجدية فقط أو الأبجدية الرقمية ، إلخ.، باستخدام تعبيرات أخرى مثل: [: alnum:] ، [: alpha:] ، [: digit:] ، [: Lower:] ، [: print:] ، [: punct:] ، [: space:] ، [: العلوي:] ، إلخ. على سبيل المثال ، للبحث عن الأحرف الكبيرة:
egrep [[:upper:]] diccioario

أتمنى أن يساعدك ذلك ... قريباً سأشرح التعابير النمطية في مقال مخصص لذلك ...


اترك تعليقك

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

*

*

  1. المسؤول عن البيانات: ميغيل أنخيل جاتون
  2. الغرض من البيانات: التحكم في الرسائل الاقتحامية ، وإدارة التعليقات.
  3. الشرعية: موافقتك
  4. توصيل البيانات: لن يتم إرسال البيانات إلى أطراف ثالثة إلا بموجب التزام قانوني.
  5. تخزين البيانات: قاعدة البيانات التي تستضيفها شركة Occentus Networks (الاتحاد الأوروبي)
  6. الحقوق: يمكنك في أي وقت تقييد معلوماتك واستعادتها وحذفها.

  1.   مانويل الكوسر قال

    سلام عليكم.

    بعض الملاحظات ...

    أنت تشرح الأمر "egrep" ولكن لا تضع الفرق بين "egrep" و "grep" ، والذي يجب أن يكون ما هو عليه هنا.

    على سبيل المثال:
    مع grep: ip -4 a | grep "[0-9] \ +"
    مع egrep: ip -4 a | egrep '[0-9] +'

    آه ، وهذا خطأ ، "egrep" Hello. * Bye "example.txt '؛ يحدث النجاح هنا عندما يكون هناك سطر في الملف يحتوي على السلسلة "Hello" متبوعة بأي شيء متبوعًا بـ "goodbye" ، يمكن أن يبدأ السطر وينتهي بأي شيء.

    سيكون هذا ما يقوله المقال:
    egrep '^ Hello. * bye $' example.txt

    وجميع الخيارات ، أو كلها تقريبًا (لا أتوقف للتحقق من ذلك) ، هي خيارات "grep" وليس "egrep" حصريًا.

    مع أطيب التحيات.

    1.    إسحاق قال

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

      1.    مانويل الكوسر قال

        مرحبًا مرة أخرى ، إسحاق.

        في الفقرة الثانية ، تقول بشكل أساسي ، أو كان يجب أن تقول ، أن "egrep" هو اسم مستعار لـ "grep -E" ، لكنك لا تعطي أي مثال على استخدام "egrep" مع بعض التعبيرات النمطية التي تتم كتابتها بشكل مختلف عن تلك المستخدمة بواسطة " grep '.

        إن تخصيص مقال لشرح التعبيرات العادية الممتدة يبدو جريئًا بالنسبة لي ، من بين أشياء أخرى لأن هناك مواقع مثل هذه لا تعلن وتقوم بعمل إعلامي مهم جدًا لمجتمع جنو: https://www.rexegg.com/

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

        أخيرًا ، قمت بإضافة وإصلاح الخطأ الذي أشرت إليه بعد تعليقي الأول (^ $). كما هو الحال في المواقع الأخرى ، كان يجب أن تستشهد بالشخص الذي أجرى التصحيح ، أو على الأقل تقول إنه تصحيح ، وهذا جزء من قاعدة جنو ، وهي نفس القاعدة التي بدأت بها هذه المدونة وتم ضائع.

        تحية.

        1.    إسحاق قال

          شكرا لك على وجهة نظرك.

  2.   فسفس قال

    فسف