Grep

Grep

متوسط

مقدمة

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

التعليمات

ابحث في الملفات عن الأسطر التي تطابق سلسلة نصية للبحث، ثم أرجع جميع الأسطر المطابقة.

يبحث أمر grep في Unix في الملفات عن الأسطر التي تطابق تعبيرًا نمطيًا. مهمتك هي تنفيذ أمر grep مبسّط يدعم البحث عن سلاسل نصية ثابتة.

يأخذ الأمر grep ثلاثة وسائط:

  1. السلسلة النصية للبحث.
  2. صفر أو أكثر من العلامات لتخصيص سلوك الأمر.
  3. ملف واحد أو أكثر للبحث فيه.

ثم يقرأ محتويات الملفات المحددة (بالترتيب المحدد)، ويجد الأسطر التي تحتوي على السلسلة النصية للبحث، وأخيرًا يُرجع تلك الأسطر بالترتيب الذي وُجدت به. عند البحث في عدة ملفات، يُسبق كل سطر مطابق باسم الملف والنقطتين الرأسيتين (':').

العلامات

يدعم الأمر grep العلامات التالية:

  • -n أضف رقم السطر والنقطتين الرأسيتين (':') في بداية كل سطر من الإخراج، مع وضع الرقم بعد اسم الملف (إن وُجد).
  • -l أخرج أسماء الملفات التي تحتوي على سطر مطابق واحد على الأقل فقط.
  • -i طابق باستخدام مقارنة غير حساسة لحالة الأحرف.
  • -v اعكس عمل البرنامج، واجمع كل الأسطر التي لا تطابق.
  • -x ابحث فقط عن الأسطر التي تطابق فيها السلسلة النصية للبحث السطر بأكمله.

عملية Node

على خلاف التمارين الأخرى، لا يُستورد ملف grep.js داخل ملف الاختبار grep.spec.js. بدلًا من ذلك، سيُستخدم كما لو أنه ملف قابل للتنفيذ. ولتسهيل ذلك، أُعِدّ ملف grep.js مع shebang، ومع تعليق يشرح ما الذي يفعله:

#!/usr/bin/env node

// The above line is a shebang. On Unix-like operating systems, or environments,
// this will allow the script to be run by node, and thus turn this JavaScript
// file into an executable. In other words, to execute this file, you may run
// the following from your terminal:
//
// ./grep.js args
//
// If you do not have a Unix-like operating system or environment, for example
// Windows without WSL, you can use the following inside a window terminal,
// such as cmd.exe:
//
// node grep.js args
//
// Read more about shebangs here: https://en.wikipedia.org/wiki/Shebang_(Unix)

ستُشغّل الاختبارات عملية Node جديدة، تُنفّذ ملف grep.js.

قراءة الوسائط

لاسترجاع الوسائط التي شُغّلت بها العملية، استخدم process.argv.

قراءة الملفات

تم توفير الدالة readLines. لا حاجة إلى تعديل مسار الملف لاستخدامها. ستحدّد الدالة readlines المسار انطلاقًا من دليل العمل الحالي، وهو مضبوط، بالنسبة إلى عمليات grep.js، على دليل التمرين.

كتابة الإخراج

لكتابة الإخراج استخدم

  • console.log للكتابة إلى مجرى الإخراج القياسي،
  • console.error للكتابة إلى مجرى الخطأ القياسي.

تعتبر الاختبارات التنفيذ ناجحًا (منجَزًا) إن لم يُكتب شيء إلى مجرى الخطأ القياسي، وغير ناجح (مرفوضًا) إن كُتب شيء إلى مجرى الخطأ القياسي.

تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
JavaScript Exercism

مستعد لبدء Grep؟

سجّل في Exercism لتتعلّم وتتقن JavaScript عبر 37 مفهومًا159 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.