مع Terminal: استخدام التعبيرات العادية

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

تحذير: هذا المنشور هو ألم في المؤخرة. قراءة هذا المنشور طوال الوقت يمكن أن يسبب فقدان الوعي. خذ فترات راحة بينهما أو اسأل طبيبك أو الصيدلي قبل قراءة المنشور بأكمله.

ما هو التعبير النمطي؟

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

التعبيرات العادية مقابل أنماط الملفات.

قبل أن ندخل في موضوع التعبيرات النمطية ، أود توضيح سوء فهم مشترك حول التعبيرات النمطية. ليس التعبير النمطي هو ما نضعه كمعامل في أوامر مثل rm و cp وما إلى ذلك للإشارة إلى ملفات مختلفة على القرص الصلب. سيكون هذا نمط ملف. على الرغم من أن التعبيرات العادية متشابهة في أنها تستخدم بعض الأحرف الشائعة ، إلا أنها مختلفة. يتم تشغيل نمط ملف على الملفات الموجودة على القرص الثابت ويعيد تلك التي تتطابق تمامًا مع النمط ، بينما يتم إطلاق تعبير عادي مقابل نص ويعيد الأسطر التي تحتوي على النص الذي تم البحث عنه. على سبيل المثال ، التعبير النمطي المقابل للنمط *.* سيكون شيئًا مثل ^.*\..*$

أنواع التعبيرات النمطية.

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

أولاً ، هناك نوعان رئيسيان من التعبيرات النمطية ، والتي يتم تضمينها في معيار POSIX ، وهو ما تستخدمه أدوات Linux. إنها التعبيرات النمطية الأساسية والممتدة. تسمح لك العديد من الأوامر التي تعمل مع التعبيرات العادية ، مثل grep أو sed ، باستخدام كلا النوعين. سوف أتحدث عنها أدناه. هناك أيضًا التعبيرات العادية على غرار PERL ، ثم هناك برامج مثل vim أو emacs تستخدم متغيرات منها. اعتمادًا على ما نريد القيام به ، قد يكون من الأنسب استخدام أحدهما أو الآخر.

اختبار التعبيرات النمطية.

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

الأول هو الأمر grep. هذا هو الأمر الذي سنستخدمه كثيرًا لإجراء عمليات البحث. بناء الجملة كما يلي:

grep [-E] 'REGEX' FICHERO
COMANDO | grep [-E] 'REGEX'

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

الحيلة التي يمكن أن تساعدنا في معرفة كيفية عمل التعبيرات العادية هي تمكين استخدام اللون في الأمر grep. بهذه الطريقة ، سيتم تمييز جزء النص الذي يتطابق مع التعبير العادي الذي نستخدمه. لتنشيط اللون في الأمر grep ، فقط تأكد من أن متغير البيئة GREP_OPTIONS تحتوي على قيمة --color، والتي يمكن إجراؤها باستخدام هذا الأمر:

GREP_OPTIONS=--color

يمكننا وضعه في bashrc لتنشيطه دائمًا.

هناك طريقة أخرى لاستخدام التعبيرات النمطية وهي استخدام الأمر sed. هذا أكثر ملاءمة لاستبدال النص ، ولكن يمكن استخدامه أيضًا للبحث. سيكون بناء الجملة كما يلي:

sed -n[r] '/REGEX/p' FICHERO
COMANDO | sed -n[r] '/REGEX/p'

يستخدم الأمر sed أيضًا التعبيرات العادية الأساسية بشكل افتراضي ، يمكنك استخدام التعبيرات العادية الموسعة مع الخيار -r.

أمر آخر أريد تسميته هو awk. يمكن استخدام هذا الأمر للعديد من الأشياء ، حيث يسمح لك بكتابة البرامج النصية بلغة البرمجة الخاصة بك. إذا كان ما نريده هو العثور على تعبير عادي في ملف أو في إخراج الأمر ، فستكون طريقة استخدامه كما يلي:

awk '/REGEX/' FICHERO
COMANDO | awk '/REGEX/'

يستخدم هذا الأمر دائمًا التعبيرات النمطية الموسعة.

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

- Lista de páginas wiki:

ArchLinux: https://wiki.archlinux.org/
Gentoo: https://wiki.gentoo.org/wiki/Main_Page
CentOS: http://wiki.centos.org/
Debian: https://wiki.debian.org/
Ubuntu: https://wiki.ubuntu.com/

- Fechas de lanzamiento:

Arch Linux: 11-03-2002
Gentoo: 31/03/2002
CentOs: 14-05-2004 03:32:38
Debian: 16/08/1993
Ubuntu: 20/10/2004

Desde Linux Rulez.

هذا هو النص الذي سأستخدمه في أمثلة بقية المنشور ، لذلك أوصي بنسخه في ملف ليكون في متناول اليد من الجهاز. يمكنك وضع الاسم الذي تريده. لقد أطلقت عليه اسم regex.

بداية الدرس.

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

أبسط شيء هو البحث عن كلمة معينة ، على سبيل المثال ، لنفترض أننا نريد العثور على جميع الأسطر التي تحتوي على كلمة "Linux". هذا هو الأسهل ، حيث يتعين علينا فقط كتابة:

grep 'Linux' regex

ويمكننا أن نرى النتيجة:

قوسلينكس: https://wiki.archlinux.org/ Arch لينكس: 11-03-2002 من لينكس رولز.

هذه هي الأسطر الثلاثة التي تحتوي على كلمة "Linux" والتي ، إذا استخدمنا خدعة الألوان ، ستظهر مميزة. لاحظ أنه يتعرف على الكلمة التي نبحث عنها حتى لو كانت جزءًا من كلمة أطول كما هو الحال في "ArchLinux". ومع ذلك ، فإنه لا يميز كلمة "linux" التي تظهر في عنوان URL "https://wiki.archlinux.org/". هذا لأنه يظهر هناك بحرف "l" صغير وقد بحثنا عنه بأحرف كبيرة. يحتوي الأمر grep على خيارات لذلك ، لكنني لن أتحدث عنها في مقال عن التعبيرات العادية.

مع هذا الاختبار البسيط يمكننا استخلاص النتيجة الأولى:

  • الحرف العادي الذي يتم وضعه في تعبير عادي يطابق نفسه.

وهو ما يعني أنه إذا وضعت الحرف "a" فسوف يبحث عن الحرف "a". يبدو منطقيًا ، أليس كذلك؟ 🙂

لنفترض الآن أننا نريد البحث عن كلمة "CentO" متبوعة بأي حرف ، ولكن فقط حرف واحد. لهذا يمكننا استخدام الحرف "." ، وهو حرف بدل يطابق أي حرف ، ولكن واحدًا فقط:

grep 'CentO.' regex

والنتيجة هي:

CentOS: http://wiki.centos.org/
سينت أو إس: 14-05-2004 03:32:38

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

  • الشخصية "." يطابق أي حرف.

لم يعد الأمر تافهًا كما يبدو ، لكن مع هذا لا يمكننا فعل الكثير. دعنا نذهب أبعد قليلا. لنفترض أننا نريد العثور على السطور التي يظهر فيها العامان 2002 و 2004. تبدوان كعمليتي بحث ، لكن يمكن إجراؤهما في وقت واحد على النحو التالي:

grep '200[24]' regex

مما يعني أننا نريد إيجاد الرقم 200 متبوعًا بـ 2 أو 4. والنتيجة هي:

قوس لينكس: 11-03-2002
جنتو: 31/03 /2002
سنتوس: 14-05-2004 03:32:38
Ubuntu: 20/10/2004

وهو ما يقودنا إلى القاعدة الثالثة:

  • تتطابق الأحرف المتعددة الموضوعة بين قوسين مع أي من الأحرف الموجودة داخل الأقواس.

الأقواس تعطي المزيد من اللعب. يمكن استخدامها أيضًا لاستبعاد الأحرف. على سبيل المثال ، لنفترض أننا نريد البحث عن مواقع يظهر فيها الحرف ":" ، لكن لا يتبعه "/". سيكون الأمر كما يلي:

grep ':[^/]' regex

إنها ببساطة مسألة وضع "^" كأول حرف داخل القوس. يمكنك وضع كل الشخصيات التي تريدها أدناه. نتيجة هذا الأمر الأخير هي التالية:

آرش لينكس: https://wiki.archlinux.org/
Gentoo: https://wiki.gentoo.org/wiki/Main_Page
CentOS: http://wiki.centos.org/
Debian: https://wiki.debian.org/
Ubuntu: https://wiki.ubuntu.com/
Arch Linux: 11-03-2002 Gentoo: 31/03/2002 المراكز: 14-05-2004 03:32:38 ديبيان: 16/08/1993 أوبونتو: 20/10/2004

الآن يتم تمييز ":" الموجودة خلف أسماء التوزيعات ، ولكن ليس تلك الموجودة في عناوين URL لأن عناوين URL بها "/" بعدها.

  • يطابق وضع الحرف "^" في بداية القوس أي حرف باستثناء الأحرف الأخرى في القوس.

شيء آخر يمكننا القيام به هو تحديد مجموعة من الشخصيات. على سبيل المثال ، للبحث عن أي رقم متبوعًا بعلامة "-" سيبدو هكذا:

grep '[0-9]-' regex

بهذا نحدد حرفًا بين 0 و 9 ثم علامة الطرح. دعونا نرى النتيجة:

قوس لينكس: 11-03-2002 CentOs: 14-05-2004 03: 32: 38

يمكن تحديد نطاقات متعددة داخل الأقواس لمزج النطاقات بأحرف فردية.

  • وضع حرفين مفصولين بعلامة "-" داخل الأقواس يطابق أي حرف داخل النطاق.

دعونا نرى الآن ما إذا كان بإمكاننا تحديد الجزء الأول من عناوين URL. الشخص الذي يقول "http" أو "https". إنها تختلف فقط في "s" النهائية ، لذلك دعونا نفعل ذلك على النحو التالي:

grep -E 'https?' regex

تُستخدم علامة الاستفهام لجعل الحرف الموجود على يساره اختياريًا. لكننا الآن أضفنا الخيار -E إلى الأمر. هذا لأن الاستجواب هو سمة من سمات التعبيرات النمطية الموسعة. حتى الآن كنا نستخدم التعبيرات النمطية الأساسية ، لذلك لم نكن بحاجة إلى وضع أي شيء فيها. دعونا نرى النتيجة:

آرتش لينكس: HTTPS: //wiki.archlinux.org/ Gentoo: HTTPS: //wiki.gentoo.org/wiki/Main_Page CentOS: HTTP: //wiki.centos.org/ دبيان: HTTPS: //wiki.debian.org/ أوبونتو: HTTPS: //wiki.ubuntu.com/

لذلك لدينا بالفعل قاعدة جديدة:

  • حرف متبوع بعلامة "؟" يطابق تلك الشخصية أو لا شيء. هذا صالح فقط للتعبيرات العادية الموسعة.

الآن سنجد كلمتين مختلفتين تمامًا. دعونا نرى كيفية العثور على السطور التي تحتوي على كل من الكلمة "Debian" و "Ubuntu".

grep -E 'Debian|Ubuntu' regex

باستخدام الشريط الرأسي ، يمكننا فصل تعبيرين عاديين مختلفين أو أكثر والبحث عن الأسطر التي تتطابق مع أي منهما:

ديبيان: https://wiki.debian.org/
أوبونتو: https://wiki.ubuntu.com/
ديبيان: 16 / 08 / 1993
أوبونتو: 20 / 10 / 2004
  • الحرف «|» يعمل على فصل التعبيرات العادية المتعددة ويتطابق مع أي منها. كما أنه خاص بالتعبيرات العادية الموسعة.

لنكمل. الآن سنبحث عن كلمة "Linux" ، ولكن فقط حيث لا تكون ملتصقة بكلمة أخرى على اليسار. يمكننا القيام بذلك على النحو التالي:

grep '\

هنا الشخصية المهمة هي "<" ، لكن يجب الهروب منها بوضع "\" أمامها حتى يفسرها grep على أنها شخصية خاصة. والنتيجة هي على النحو التالي:

قوس لينكس: 11-03-2002 من لينكس رولز.

يمكنك أيضًا استخدام "\>" للبحث عن كلمات غير متجاورة تمامًا. دعنا نذهب بمثال. لنجرب هذا الأمر:

grep 'http\>' regex

الناتج الذي ينتج هو هذا:

CentOS: HTTP: //wiki.centos.org/

ظهر "Http" ، ولكن ليس "https" ، لأنه في "https" لا يزال هناك حرف على يمين "p" يمكن أن يكون جزءًا من كلمة.

  • يتطابق الحرفان "<" و ">" مع بداية الكلمة ونهايتها ، على التوالي. يجب تخطي هذه الأحرف حتى لا يتم تفسيرها على أنها أحرف حرفية.

نذهب مع الأشياء أكثر تعقيدًا بعض الشيء. يطابق الحرف "+" الحرف الموجود على يساره ، ويتكرر مرة واحدة على الأقل. هذا الحرف متاح فقط مع التعبيرات العادية الموسعة. باستخدامه يمكننا البحث ، على سبيل المثال ، عن تسلسلات من عدة أرقام متتالية تبدأ بـ ":".

grep -E ':[0-9]+' regex

النتيجة:

CentOs: 14-05-2004 03: 32: 38

يتم تمييز الرقم 38 أيضًا لأنه يبدأ أيضًا بـ ":".

  • يطابق الحرف "+" الحرف الموجود على يساره ، ويتكرر مرة واحدة على الأقل.

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

أولاً ، سنجد كل التسلسلات المكونة من أربعة أرقام الموجودة:

grep '[0-9]\{4\}' regex

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

grep -E '[0-9]{4}' regex

والنتيجة في الحالتين ستكون كالتالي:

قوس لينكس: 11-03-2002
جنتو: 31/03 /2002
سنتوس: 14-05-2004 03:32:38
Debian: 16/08/1993
أوبونتو: 20/10 /2004
  • يتطابق الحرفان "{" و "}" مع رقم بينهما مع الحرف السابق مع تكرار العدد المحدد من المرات.

الآن المثال الآخر مع الأقواس. لنفترض أننا نريد العثور على الكلمات التي يتراوح عدد أحرفها بين 3 و 6 أحرف صغيرة. يمكننا القيام بما يلي:

grep '[a-z]\{3,6\}' regex

والنتيجة ستكون هذا:

- لامISTA de صفحةs ويكي: إلىRCHLinux: HTTPS:/ /ويكي.آرش لينكس.ORG/ زانتو: HTTPS:/ /ويكي.جنتو.ORG/ويكي/Mعين_Pالسن
Cوالأنف والحنجرةOS: HTTP:/ /ويكي.سينت أو إس.ORG/ دإبيان: HTTPS:/ /ويكي.ديبيان.ORG/ أونهاية: HTTPS:/ /ويكي.أوبونتو.كوم/ - Fاشتقت de إطلاق: إلىRCH Linux: 11-03-2002 مانتو: 31/03/2002 جوالأنف والحنجرةOs: 14-05-2004 03:32:38
Dإبيان: 16/08/1993 يونهاية: 20/10/2004 دأنه Linux Rأوليز.

والتي ، كما ترى ، لا تشبه إلى حد كبير ما أردناه. ذلك لأن التعبير النمطي يجد الحروف ضمن الكلمات الأخرى الأطول. لنجرب هذا الإصدار الآخر:

grep '\<[a-z]\{3,6\}\>' regex

النتيجة:

- قائمة الصفحات ويكي: ArchLinux: HTTPS:/ /ويكي.ارشلينوكس.ORG/ جينتو: HTTPS:/ /ويكي.جنتو.ORG/ويكي/ الصفحة الرئيسية CentOS: HTTP:/ /ويكي.سينت أو إس.ORG/ ديبيان: HTTPS:/ /ويكي.ديبيان.ORG/ أوبونتو: HTTPS:/ /ويكي.أوبونتو.كوم/

يبدو هذا بالفعل أكثر مثل ما أردناه. ما فعلناه يتطلب أن تبدأ الكلمة قبل الحرف الأول مباشرة وتنتهي بعد الحرف الأخير.

  • يتطابق الحرفان "{" و "}" مع رقمين بينهما مفصول بفاصلة مع الحرف السابق مع تكرار عدد المرات المشار إليه بالرقمين.

دعنا الآن نلقي نظرة على الشخصية التي هي رئيس الوزراء "+". إنها "*" وعمليتها متشابهة جدًا فقط لأنها تطابق أي عدد من الأحرف بما في ذلك الصفر. وهذا يعني أنه يفعل نفس الشيء مثل "+" ولكنه لا يتطلب ظهور الحرف الموجود على يساره في النص. على سبيل المثال ، دعنا نحاول البحث عن تلك العناوين التي تبدأ على wiki وتنتهي في org:

grep 'wiki.*org' regex

دعونا نرى النتيجة:

ArchLinux: https: //wiki.archlinux.org/ جينتو: https: //wiki.gentoo.org/ wiki / Main_Page CentOS: http: //wiki.centos.org/ ديبيان: https: //wiki.debian.org/

الكمال.

الآن الشخصية الأخيرة التي سنراها. يتم استخدام الحرف "\" للهروب من الحرف إلى يمينه بحيث يفقد معناه الخاص. على سبيل المثال: لنفترض أننا نريد تحديد الخطوط التي تنتهي بنقطة. قد يكون أول ما قد يحدث لنا هو هذا:

grep '.$' regex

النتيجة ليست ما نبحث عنه:

- قائمة صفحات الويكي:
آرتش لينكس: https://wiki.archlinux.org/
جينتو: https://wiki.gentoo.org/wiki/Main_Page
سينت أو إس: http://wiki.centos.org/
دبيان: https://wiki.debian.org/
أوبونتو: https://wiki.ubuntu.com/
- تواريخ الإصدار: Arch Linux: 11-03-2002
جنتو: 31/03/2002
CentOs: 14-05-2004 03:32:38
ديبيان: 16/08/1993
أوبونتو: 20/10/2004
Desde Linux رولز.

هذا بسبب "." إنه يطابق أي شيء ، بحيث يطابق التعبير العادي الحرف الأخير من كل سطر مهما كان. الحل هو هذا:

grep '\.$' regex

الآن النتيجة هي ما نريد:

Desde Linux رولز.

أكثر من لعبة

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

الآن هذا كل شيء. إذا أعجبك هذا المقال ، فربما يمكنك كتابة آخر. في غضون ذلك ، أوصيك بتجربة جميع التعبيرات العادية في المحطة لمعرفة كيفية عملها بوضوح. وتذكر: يمكن فقط لـ Chuck Norris تحليل HTML باستخدام التعبيرات النمطية.


اترك تعليقك

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

*

*

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

  1.   حزقيال قال

    ماذا ستكون حياتنا بدون regex؟
    المقال مفيد للغاية ، لكني سأقرأه شيئًا فشيئًا. شكرا جزيلا.

    1.    هيكسبورغ قال

      شكرا لك على التعليق. ما زلت لا أصدق أن مقالتي قد صدرت. 🙂 لقد جاء مع بعض الأخطاء ، لكن آمل أن يكون مفيدًا. 🙂

  2.   سكاليبور قال

    شكرا لكم! ..

    منذ بعض الوقت كان عليّ أن أدرس قليلاً عن التعبيرات العادية .. .. أشكرك على التدريس .. والدليل خطوة بخطوة لتعلم كل واحدة منها ..

    جيد جدا! .. .. سأحصل على هذا الأسبرين .. ه

    1.    هيكسبورغ قال

      عفوا. الشجاعة والتعبيرات العادية لا يمكن أن تكون معك. 🙂

  3.   تانراكس قال

    مشاركة رائعة! عمل عظيم. أتساءل كم ساعة استغرقتها

    1.    هيكسبورغ قال

      هههه!! السؤال هو: كم ساعة كنت سأستغرق لو قلت كل ما كنت أنوي قوله؟ لانهائي !! 🙂

  4.   تموز قال

    شيء واحد لم أكن أعرفه ، مقال جيد!

    1.    هيكسبورغ قال

      شكرا. إنه لمن دواعي سروري أن أشاركها معك.

  5.   helena_ryuu قال

    شرح عظيم. مبروك! مفيدة حقا!

    1.    هيكسبورغ قال

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

  6.   مكافحة قال

    هذا يجب أن يذهب إلى مكان ما خاص. مثل "المميز" ولكن لها فائدة محددة للغاية. مفيد للغاية ، على الرغم من أنني أود أن أراه مطبقًا على Vim.

    1.    هيكسبورغ قال

      هذا سؤال عن نفسي. لدي المزيد من المقالات حول التعبيرات العادية في الاعتبار. ويمكنني أن أتحدث عن فيم فيها. له بعض الاختلافات عما شرحته في هذا المقال. إنها مسألة مواكبة ذلك. 🙂

  7.   فرناندو قال

    جيد!

    مقالتك جيدة جدًا، ومن الغريب، لقد نشرت مؤخرًا (الآن) على موقع الويب الخاص بي إدخالاً كنت أقوم بإعداده لبضعة أيام حيث قمت بجمع قائمة بالأحرف الأولية للتعبيرات العادية وبعض الأمثلة. وكان من العدل الدخول DesdeLinux وشاهد مدخلاً حول نفس الموضوع!

    إذا كان هناك أي عزاء ، فإنني أكثر كسًا 😀

    من المؤكد أن regex هو أحد أكثر الأشياء المفيدة ، فأنا عادةً ما أستخدمها لقص إخراج الأوامر والحفاظ على الجزء الذي يثير اهتمامي ، ثم التفاعل معه في برنامج نصي bash ، على سبيل المثال. لقد استخدمتها أيضًا كثيرًا في الجامعة ، وهي ذات أهمية حيوية في بناء المجمعين (في تعريف المعجم والمحلل). باختصار ، عالم كامل.

    تحياتي وعمل جيد جدا.

    1.    هيكسبورغ قال

      شكرا جزيلا.

      أنا أيضا أحب مقالتك. إنه أكثر إيجازًا من خاصتي. يمكن أن يكون بمثابة مرجع سريع. إنها صدفة أننا كتبناها في نفس الوقت. يمكنك أن ترى أن الناس مهتمون بالموضوع. 🙂

  8.   اليري قال

    التعبيرات العادية للدمى =) ، أصبح الأمر الآن أكثر وضوحًا بالنسبة لي ، بالمناسبة ، تتمثل إحدى طرق الحصول على الإخراج مع اللون لـ grep في إنشاء اسم مستعار في .bashrc alias grep = 'grep –color = always' ، في حال كان يعمل مع شخص ما .

    تحياتي

    1.    هيكسبورغ قال

      صحيح. هذه طريقة أخرى للقيام بذلك. شكرا على الادخال. 🙂

  9.   KZKG ^ جارا قال

    O_O… جزء من مساهمة !!! O_O ...
    شكرًا جزيلاً لك على المنشور ، كنت أنتظر شيئًا كهذا لفترة من الوقت ، أتركه مفتوحًا لقراءته بهدوء في المنزل دون أي متاعب للتركيز.

    شكرا على المقال ، أنا حقا أفعل 😀

    1.    هيكسبورغ قال

      علمت أنك ستحبه. هههه!! الحقيقة هي أن العديد من الأشياء مفقودة ، لكن لدي بالفعل جزء ثان في الاعتبار. 🙂

  10.   إلييسير تاتيس قال

    مقال رائع ، لو كنت قد قرأته بالأمس فقط ، لكان الفصل الذي قدمته اليوم أسهل على طلابي!

    1.    هيكسبورغ قال

      هههه!! سيء للغاية لقد تأخرت ، لكن سعيد لأنه مفيد. 🙂

  11.   ليوتورو قال

    أخيرًا !!! ، المنشور رائع جدًا .... لقد وجدت أخيرًا شيئًا يشرح بوضوح التعبيرات العادية ...

    1.    هيكسبورغ قال

      هناك الكثير من المعلومات ، ولكن من الصعب العثور على شيء يسهل فهمه. أنا سعيد لأنني ملأت تلك الفجوة. 🙂

      تحية.

  12.   شكسبير رودس قال

    مرحبًا ، أحتاج إلى مساعدة ، لا بد لي من إجراء بحث في / var / logs بالتنسيق: yymmdd ، وتأتي السجلات مثل 130901.log -130901.log ، لا بد لي من البحث عن كل تلك الموجودة بين 1 سبتمبر إلى 11 أكتوبر ، الشيء الوحيد الذي تمكنت من القيام به هو إزالة شهر سبتمبر بأكمله ولكني لا أعرف كيفية القيام بالسلسلة الكاملة:

    مثال: يعرض 1309 [0-3] السجلات بين 1 إلى 30 سبتمبر ، لكنني لا أعرف كيفية الحصول عليها أيضًا في نفس السلسلة من 1 إلى 11 أكتوبر.

    1.    هيكسبورغ قال

      القيام بذلك باستخدام التعبيرات النمطية أمر معقد بعض الشيء. يخطر ببالي أن شيئًا كهذا قد ينجح:

      13(09[0-3]|10(0|1[01]))

      إنه تعبير نمطي ممتد. أنت لا تذكر الأداة التي تستخدمها ، لذلك لا يمكنني تقديم المزيد من التفاصيل لك.

      على أي حال ، أعتقد أن هذا هو الحال بدلاً من استخدام التعبيرات النمطية ، فمن الأفضل القيام بذلك باستخدام find. يمكنك تجربة شيء مثل هذا:

      تجد. -نيورمت '01 سبتمبر '-أ! -نيويرمت '11 أكتوبر '-طباعة

      حظ. نأمل أن يكون هذا يمكن أن تساعدك.

  13.   تشيبو قال

    مرحبًا ، بادئ ذي بدء ، أود أن أشكرك على عملك لأن هذه الصفحة ضمن "أفضل 3" من أفضل مواقع Linux.
    كنت أتدرب ولم أكن أعرف لماذا لا يعمل RegExp على رقم هاتف معي وكان ذلك بسبب أنني كنت أفتقد "-E" (الذي أدركته بفضل هذا المنشور).
    أردت أن أسألك عما إذا كنت لا تعرف ملف pdf جيدًا أو موقعًا توجد فيه تمارين على RegExp ، على الرغم من أنك بقليل من الخيال يمكنك التدرب على اختراعها بنفسك.

    تحياتي ، بابلو.

  14.   كالي قال

    جيد جدًا ، لقد قرأت كل شيء للتو ، ونعم الآن أنا بحاجة إلى أسبرين

  15.   أوسكار قال

    أفضل تفسير رأيته للتعبيرات النمطية. شكري للمؤلف لتقاسم هذا العمل.

    تحية.

  16.   الكسندر قال

    أنا حقا أحب الشرح الجيد جدا