البرنامج التعليمي للتعبير العادي في Linux: مثال Grep Regex

⚡ ملخص ذكي

التعبيرات النمطية في لينكس هي تسلسلات أحرف خاصة تبحث في البيانات وتطابق الأنماط المعقدة عبر أدوات مثل grep و sed و vi، باستخدام الأشكال الأساسية والفترات الزمنية والممتدة وتوسيع الأقواس لتصفية النص بدقة.

  • 🔎 ما هم: تُستخدم التعابير النمطية، المختصرة إلى regexp أو regex، لوصف أنماط النصوص للبحث والمطابقة.
  • 🧩 مجموعة أساسية: رموز مثل . ^ $ * و \ تُثبت، وتُكرر، وتُستخدم للهروب من الأحرف في نمط معين.
  • 🔢 فترة: تتحكم الأقواس مثل {n} و {n,m} في عدد مرات تكرار الحرف السابق.
  • ➕ وسعوا: باستخدام grep -E، فإن \+ و \? تطابقان ظهور واحد أو أكثر وصفر أو واحد من الحرف.
  • 🧵 توسيع الدعامة: تُستخدم الأقواس المعقوفة لإنشاء سلاسل نصية متعددة من تسلسل أو قائمة مفصولة بفواصل.
  • 🛠️ أين يُستخدم: تعتمد أدوات مثل grep و sed و tr و vi على التعبيرات النمطية لتصفية النصوص.
  • 🤖 مساعدة الذكاء الاصطناعي: يمكن للمساعدين الذين يعملون بالذكاء الاصطناعي وبرنامج GitHub Copilot إنشاء أنماط التعبيرات النمطية وشرحها وتصحيح أخطائها بسرعة.

التعبيرات النمطية في لينكس باستخدام grep — أمثلة على التعبيرات النمطية الأساسية، والفترات الزمنية، والموسعة

تُعدّ التعابير النمطية إحدى أقوى ميزات لينكس أدوات معالجة النصوص، التي تتيح لك مطابقة البيانات وتصفيتها وتحويلها باستخدام أنماط مختصرة. تشرح هذه الصفحة الأشكال الأساسية والفترية والموسعة، بالإضافة إلى توسيع الأقواس، مع أمثلة عملية لـ grep.

ما هي تعبيرات Linux العادية؟

التعابير النمطية في لينكس عبارة عن أحرف خاصة تساعد في البحث عن البيانات ومطابقة الأنماط المعقدة. يُختصر التعبير النمطي إلى "regexp" أو "regex". تُستخدم هذه التعابير في العديد من برامج لينكس مثل: البقرى، bash، rename، sed، والمزيد.

أنواع التعبيرات العادية

لتسهيل الفهم، دعونا نتعرف على أنواع التعبيرات النمطية المختلفة واحدة تلو الأخرى. تغطي هذه الصفحة التعبيرات النمطية الأساسية، والفترات، والموسعة، وتنتهي بتوسيع الأقواس.

التعبيرات العادية الأساسية

من بين الأوامر الشائعة الاستخدام التي تعمل مع التعبيرات النمطية: tr و sed. viو grep. يسرد الجدول أدناه بعض التعبيرات النمطية الأساسية.

رمز الوصف
. يستبدل أي حرف
^ يطابق بداية سلسلة نصية
$ يطابق نهاية سلسلة نصية
* يطابق الحرف السابق صفرًا أو أكثر من المرات
\ يمثل الأحرف الخاصة
() مجموعات التعبيرات العادية
? يطابق حرفًا واحدًا فقط

لنلقِ نظرة على مثال. أولاً، قم بتشغيل الأمر cat sample لعرض محتويات ملف موجود، كما هو موضح أدناه.

مثال على أمر cat لعرض محتويات ملف موجود في الطرفية

بعد ذلك، ابحث عن محتوى يحتوي على الحرف 'a'. تُظهر لقطة الشاشة أدناه أن الأمر grep يُعيد كل سطر يتضمن الحرف 'a'.

grep يبحث في ملف العينة عن الأسطر التي تحتوي على الحرف a

يشير الرمز '^' إلى بداية سلسلة نصية. يبحث المثال أدناه عن محتوى يبدأ بالحرف 'a'.

grep مع علامة الإقحام (^) يطابق فقط الأسطر التي تبدأ بالحرف a

يتم تصفية الأسطر التي تبدأ بالحرف فقط. أما الأسطر التي لا تحتوي على الحرف 'a' في بدايتها فيتم تجاهلها.

لنلقِ نظرة على مثال آخر. تُظهر لقطة الشاشة أدناه محتويات الملف النموذجي قبل تطبيق التصفية بناءً على نهاية السطر.

محتويات الملف النموذجية معروضة قبل تصفية الأسطر التي تنتهي بالحرف t

حدد فقط تلك الأسطر التي تنتهي بالحرف 't' باستخدام علامة التثبيت '$'، كما هو موضح أدناه.

استخدم الأمر grep مع علامة الدولار لتحديد الأسطر التي تنتهي بالحرف t فقط

الفاصل الزمني التعبيرات العادية

تحدد هذه التعبيرات عدد مرات ظهور حرف معين في سلسلة نصية. وهي مدرجة أدناه.

التعبير الوصف
{ن} يطابق الحرف السابق الذي يظهر مرات "n" تمامًا
{ن ، م} يطابق الحرف السابق الذي يظهر 'n' مرات ولكن ليس أكثر من m
{ن، } يطابق الحرف السابق فقط عندما يظهر "n" مرات أو أكثر

على سبيل المثال، قم بتصفية جميع الأسطر التي تحتوي على الحرف 'p'. تُظهر لقطة الشاشة أدناه الأسطر المطابقة.

يقوم الأمر grep بتصفية ملف العينة بحثًا عن الأسطر التي تحتوي على الحرف p

والآن، تحقق من ظهور الحرف 'p' مرتين بالضبط في السلسلة النصية، واحدة تلو الأخرى. صيغة ذلك هي:

cat sample | grep -E p\{2}

تظهر نتيجة مطابقة الفترات أدناه.

grep -E تعبير الفاصل الزمني الذي يطابق الحرف p الذي يظهر مرتين بالضبط

ملحوظة: أنت بحاجة إلى إضافة -E مع هذه التعبيرات العادية.

التعبيرات العادية الموسعة

تجمع هذه التعابير النمطية أكثر من تعبير واحد. بعضها هو:

التعبير الوصف
\+ يطابق تكرارًا واحدًا أو أكثر للحرف السابق
\? يطابق صفرًا أو يتطابق مع تكرار واحد للحرف السابق

على سبيل المثال، ابحث عن جميع حالات ظهور الحرف 't'. تُظهر لقطة الشاشة أدناه النتيجة.

يقوم الأمر grep بالبحث في ملف العينة عن جميع الأسطر التي تحتوي على الحرف t

لنفترض أنك تريد تصفية الأسطر التي يسبق فيها الحرف 'a' الحرف 't'. يمكنك استخدام أمر مثل الأمر التالي:

cat sample|grep "a\+t"

يظهر الناتج في لقطة الشاشة التالية.

grep extended expression matching one or more a character following t

توسيع هدفين

صيغة توسيع الأقواس المعقوفة هي إما سلسلة أو قائمة عناصر مفصولة بفواصل داخل أقواس معقوفة '{}'. يتم فصل العناصر البادئة والنهائية في السلسلة بنقطتين '..'.

بعض الأمثلة موضحة أدناه.

أمر echo باستخدام توسيع الأقواس لإنشاء سلاسل نصية متعددة من تسلسل وقائمة

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

الأسئلة الشائعة

يستخدم grep التعابير النمطية الأساسية افتراضيًا. يُمكّن egrep التعابير الموسعة (كما في grep -E)، بينما يُطابق fgrep السلاسل النصية الثابتة دون الحاجة إلى تعابير نمطية (grep -F). تُصنّف إصدارات GNU grep الحديثة egrep وfgrep على أنهما مهملتان، لذا يُفضّل استخدام grep -E وgrep -F.

تُطابق فئات الأحرف مجموعةً من الأحرف. تُطابق تعابير الأقواس مثل [az] نطاقًا، بينما تُطابق فئات POSIX مثل [[:alpha:]] و[[:digit:]] و[[:space:]] الأحرف والأرقام والمسافات. تحافظ هذه الفئات على سهولة قراءة الأنماط وقابليتها للنقل عبر مختلف اللغات.

أضف الخيار ‎-i، على سبيل المثال grep -i “hello” sample. هذا يطابق Hello وHELLO وhello على حد سواء. بدون ‎-i، تكون التعابير النمطية حساسة لحالة الأحرف، لذا يُعامل الحرف الكبير وشكله الصغير كحرفين مختلفين.

تُستخدم الأحرف البديلة (globbing) في سطر الأوامر لتوسيع أسماء الملفات، حيث يُمثل * أي حرف، بينما يُمثل ؟ حرفًا واحدًا. أما التعابير النمطية فتُطابق النصوص داخل الملفات، حيث يُمثل * صفرًا أو أكثر من الحرف السابق. وتختلف دلالة الرموز نفسها باختلاف السياق.

استخدم الخيار ‎-o، على سبيل المثال grep -o “a\+t” sample. بدلاً من طباعة السطر بأكمله، يطبع grep الجزء الذي يطابق النمط فقط، تطابق واحد في كل سطر. وهو مفيد لـ...tracالقيم مثل عناوين البريد الإلكتروني أو الأرقام.

استخدم التناوب مع رمز الأنبوب (|). في الوضع الموسع، يطابق الأمر grep -E “cat|dog” sample الأسطر التي تحتوي على كلمة cat أو dog. في الوضع الأساسي، يجب عليك استخدام رمز الأنبوب (|) كعلامة هروب (|) كما في الأمر grep “cat\|dog” sample. يتيح لك التناوب البحث في عدة أنماط في آن واحد.

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

نعم. مساعد الطيار جيثب يقترح البرنامج أوامر grep والتعبيرات النمطية مباشرةً من تعليق أو نمط جزئي أثناء الكتابة. يُسرّع هذا من كتابة التعبيرات المعقدة، ولكن يُنصح باختبار أي نمط مُولّد على بيانات حقيقية قبل الاعتماد عليه.

تلخيص هذه التدوينة بـ: