كيفية تحديد ما إذا كانت السلسلة تحتوي على سلسلة فرعية في Bash

كيفية تحديد ما إذا كانت السلسلة تحتوي على سلسلة فرعية في Bash
Bash

مقدمة لمطابقة السلسلة في باش

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

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

يأمر وصف
[[ $string == *"$substring"* ]] يختبر ما إذا كانت السلسلة المتغيرة تحتوي على السلسلة الفرعية $substring باستخدام مطابقة النمط.
grep -q الوضع الهادئ في grep، يُرجع 0 إذا تم العثور على سلسلة البحث و1 بخلاف ذلك، دون إنتاج أي مخرجات.
echo "$string" | grep يبحث عن السلسلة الفرعية داخل السلسلة عن طريق توصيل السلسلة إلى grep.
case "$string" in *"$substring"*) يستخدم بيان الحالة لمطابقة النمط للتحقق من وجود السلسلة الفرعية داخل السلسلة.
esac ينهي كتلة بيان الحالة.
;; ينهي كتلة النمط ضمن بيان الحالة.
-q خيار في grep يمنع الإخراج، وهو مفيد للتحقق من التواجد دون عرض التطابقات.

فهم مطابقة السلسلة في باش

في البرمجة النصية لـ Bash، يعد تحديد ما إذا كانت السلسلة تحتوي على سلسلة فرعية محددة أمرًا شائعًا. يستخدم البرنامج النصي الأول إمكانات مطابقة الأنماط الخاصة بـ Bash. الحالة [[ $string == *"$substring"* ]] يتحقق مما إذا كان المتغير string يحتوي على السلسلة الفرعية $substring. إذا تم العثور على النمط، فإنه يردد عبارة "إنه هناك!". هذه الطريقة موجزة وفعالة لعمليات البحث البسيطة عن السلاسل الفرعية مباشرة في Bash.

يستخدم السيناريو الثاني grep لنفس المهمة. من خلال ترديد string والأنابيب إليه grep -q، يمكننا التحقق من وجود $substring بطريقة مختلفة قليلا. ال -q الخيار يضمن ذلك grep يعمل في الوضع الهادئ، ويعيد 0 إذا تم العثور على السلسلة الفرعية، دون أي إخراج. هذا البرنامج النصي مفيد عندما تحتاج إلى الاستفادة منه grepإمكانات البحث عن النص القوية داخل برنامج Bash النصي.

استخدام مطابقة الأنماط وGrep

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

توفر كل هذه الطرق طرقًا فعالة للتحقق من وجود سلاسل فرعية في Bash، ولكل منها مميزاتها الخاصة. مطابقة النمط مع [[...]] مباشر وفعال للحالات البسيطة. استخدام grep يوفر المزيد من المرونة وقدرات معالجة النصوص القوية، خاصة لعمليات البحث عن السلاسل الأكثر تعقيدًا. ال case يوفر البيان طريقة منظمة وقابلة للقراءة للتعامل مع الشروط المتعددة في البرنامج النصي الخاص بك. يتيح لك فهم هذه الأساليب اختيار أفضل أسلوب لاحتياجات البرمجة النصية الخاصة بك.

التحقق مما إذا كانت السلسلة تحتوي على سلسلة فرعية في Bash

البرمجة النصية باش

#!/bin/bash
# Define the main string
string="My string"
# Define the substring to search for
substring="foo"
# Check if the substring is present
if [[ $string == *"$substring"* ]]; then
  echo "It's there!"
else
  echo "It's not there!"
fi

استخدام grep للعثور على سلسلة فرعية في Bash

برمجة باش مع grep

#!/bin/bash
# Define the main string
string="My string"
# Define the substring to search for
substring="foo"
# Use grep to check for the substring
if echo "$string" | grep -q "$substring"; then
  echo "It's there!"
else
  echo "It's not there!"
fi

استخدام بيان الحالة للتحقق من وجود سلسلة فرعية

برمجة باش مع بيان الحالة

#!/bin/bash
# Define the main string
string="My string"
# Define the substring to search for
substring="foo"
# Use a case statement to check for the substring
case "$string" in
  *"$substring"*)
    echo "It's there!"
    ;;
  *)
    echo "It's not there!"
    ;;
esac

تقنيات متقدمة لمطابقة السلسلة في Bash

إلى جانب عمليات البحث الأساسية عن السلاسل الفرعية، توفر برمجة Bash أيضًا تقنيات متقدمة مثل التعبيرات العادية وتوسيع المعلمات. توفر التعبيرات العادية طريقة قوية للبحث عن الأنماط داخل السلاسل. باستخدام أدوات مثل grep مع ال -E يتيح لك خيار (التعبيرات العادية الموسعة) تحديد أنماط البحث المعقدة. على سبيل المثال، الأمر echo "$string" | grep -E 'pattern' يتيح لك البحث عن أنماط أكثر تحديدًا أو مرونة داخل سلاسلك. هذه الطريقة فعالة عند التعامل مع تنسيقات النص المتغيرة.

تقنية أخرى مفيدة هي توسيع المعلمة. يوفر Bash عدة أشكال من توسيع المعلمات التي يمكن استخدامها لمعالجة السلاسل واستخراج السلاسل الفرعية. على سبيل المثال، بناء الجملة ${string:position:length} يستخرج سلسلة فرعية من string يبدأ من position لاجل منحه length. وبالمثل، النمط ${string#substring} يزيل أقصر مباراة من substring من بداية string، بينما ${string##substring} يزيل أطول مباراة. تعتبر هذه التقنيات مفيدة لمزيد من التحكم الدقيق في معالجة السلسلة داخل البرامج النصية الخاصة بك.

أسئلة وأجوبة شائعة حول مطابقة السلسلة في Bash

  1. ما هي أبسط طريقة للتحقق من وجود سلسلة فرعية في باش؟
  2. إن أبسط طريقة هي استخدام مطابقة النمط مع [[ $string == *"$substring"* ]] بناء الجملة.
  3. كيف يمكنني استخدام grep للعثور على سلسلة فرعية؟
  4. يمكنك استخدام echo "$string" | grep -q "$substring" للتحقق مما إذا $substring موجود في $string.
  5. ما هو توسيع المعلمة في باش؟
  6. توسيع المعلمة هو أسلوب في Bash لمعالجة السلاسل. على سبيل المثال، ${string:position:length} يستخرج سلسلة فرعية.
  7. هل يمكنني استخدام التعبيرات العادية في نصوص Bash؟
  8. نعم، يمكنك استخدام التعبيرات العادية مع أدوات مثل grep -E لمطابقة الأنماط الموسعة.
  9. ماذا يكون ال case بيان تفعل في باش؟
  10. ال case تسمح العبارة بمطابقة النمط مع المتغير وتنفيذ الأوامر بناءً على النمط المطابق.
  11. كيف ${string#substring} عمل؟
  12. يزيل هذا الشكل من توسيع المعلمة أقصر تطابق substring من بداية string.
  13. ماهو الفرق بين ${string#substring} و ${string##substring}؟
  14. يقوم الأول بإزالة أقصر تطابق، بينما يقوم الأخير بإزالة أطول تطابق substring من بداية string.
  15. هل يمكنني التحقق من وجود سلاسل فرعية متعددة في شرط واحد؟
  16. نعم يمكنك استخدام case عبارة للتحقق من وجود أنماط متعددة في حالة واحدة.
  17. ما فائدة -q الخيار في grep؟
  18. ال -q الخيار في grep يمنع الإخراج ويعيد حالة الخروج فقط، مما يجعله مفيدًا لعمليات التحقق الشرطية.

الأفكار النهائية حول مطابقة السلسلة في Bash

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