لقد حصلت على وظيفة في مكتبة محلية تساعد في تنظيم مجموعتها من الكتب القديمة. وكثيرًا ما يبحث الطلاب الروّاد عن اقتباسات لا يتذكرونها إلا جزئيًا ليستشهدوا بها في أوراقهم الدراسية. وبدلًا من أن تقرأ كل كتاب يدويًا من الغلاف إلى الغلاف، تقرر بناء أداة صغيرة تفحص الكتب بحثًا عن هذه الاقتباسات الجزئية.
ابحث في الملفات عن الأسطر التي تطابق سلسلة نصية للبحث، ثم أرجع جميع الأسطر المطابقة.
يبحث أمر grep في Unix في الملفات عن الأسطر التي تطابق تعبيرًا نمطيًا.
مهمتك هي تنفيذ أمر grep مبسّط يدعم البحث عن سلاسل نصية ثابتة.
يأخذ الأمر grep ثلاثة وسائط:
ثم يقرأ محتويات الملفات المحددة (بالترتيب المحدد)، ويجد الأسطر التي تحتوي على السلسلة النصية للبحث، وأخيرًا يُرجع تلك الأسطر بالترتيب الذي وُجدت به. عند البحث في عدة ملفات، يُسبق كل سطر مطابق باسم الملف والنقطتين الرأسيتين (':').
يدعم الأمر grep العلامات التالية:
-n أضف رقم السطر والنقطتين الرأسيتين (':') في بداية كل سطر من الإخراج، مع وضع الرقم بعد اسم الملف (إن وُجد).-l أخرج أسماء الملفات التي تحتوي على سطر مطابق واحد على الأقل فقط.-i طابق باستخدام مقارنة غير حساسة لحالة الأحرف.-v اعكس عمل البرنامج، واجمع كل الأسطر التي لا تطابق.-x ابحث فقط عن الأسطر التي تطابق فيها السلسلة النصية للبحث السطر بأكمله.يدعم Powershell معاملات التبديل في الدوال، وهي تتصرّف بشكل مشابه للأعلام في سطر الأوامر.
وتماشيًا مع عُرف Powershell في تسمية الـ cmdlet وخصائصها بأسماء مفصّلة ومطوّلة، تغيّرت أسماء الأعلام المستخدمة في هذا التمرين أيضًا بما يعكس اللغة.
Line (-n): أضف رقم السطر ونقطتين (':') في بداية كل سطر من المخرجات، مع وضع الرقم بعد اسم الملف (إن وُجد).File (-l): أخرِج فقط أسماء الملفات التي تحتوي على سطر مطابق واحد على الأقل.Insensitive (-i): طابِق باستخدام مقارنة لا تفرّق بين حالة الأحرف.Invert (-v): اعكس عمل البرنامج، واجمع كل الأسطر التي تفشل في المطابقة.Whole (-x): ابحث فقط عن الأسطر التي تطابق فيها السلسلة النصية للبحث السطر بأكمله.ينبغي أن يكون تركيزك الأساسي على تنفيذ دالة grep، لا على القلق بشأن الحصول على مسار الملفات بشكل صحيح.
يوفّر هذا التمرين 3 ملفات نصية مطلوبة: iliad.txt وmidsummer-night.txt وparadise-lost.txt في مجموعة الاختبارات، ويمكنك الوصول إلى محتواها ببساطة باستخدام Get-Content مع الاسم بدلًا من مسار الملف المعتاد.
يمتلك Powershell بالفعل cmdlet مشابهًا لـ grep يُسمّى Select-String، ويمكنك قراءة المزيد عنه هنا إن كنت مهتمًا.
ولا تستخدم Select-String في هذا التمرين في أي مرحلة.
سجّل في Exercism لتتعلّم وتتقن PowerShell عبر 136 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.