Grep

Grep

मध्यम

परिचय

आपने एक स्थानीय पुस्तकालय में नौकरी कर ली है, जहाँ आप पुरानी किताबों के संग्रह को व्यवस्थित करने में मदद करते हैं। छात्र पाठक अक्सर अपने टर्म पेपर में उद्धृत करने के लिए आधे-अधूरे याद रह गए उद्धरण ढूँढते रहते हैं। हर किताब को शुरू से अंत तक खुद पढ़ने के बजाय, आप एक छोटा टूल बनाने का फैसला करते हैं, जो उन किताबों को स्कैन करके इन अधूरे उद्धरणों को खोज निकाले।

निर्देश

फाइलों में ऐसी लाइनें खोजिए जो सर्च स्ट्रिंग से मेल खाती हों, और मेल खाने वाली सभी लाइनें लौटाइए।

Unix का grep कमांड फाइलों में ऐसी लाइनें खोजता है जो किसी रेगुलर एक्सप्रेशन से मेल खाती हों। आपको एक सरल grep कमांड बनाना है, जो तय स्ट्रिंग खोज सके।

grep कमांड तीन आर्गुमेंट लेता है:

  1. वह स्ट्रिंग जिसे खोजना है।
  2. कमांड का व्यवहार बदलने के लिए शून्य या अधिक फ्लैग।
  3. एक या अधिक फाइलें जिनमें खोजना है।

इसके बाद यह दी गई फाइलों को उसी क्रम में पढ़ता है जिस क्रम में उनके नाम दिए गए हैं। फिर उन लाइनों को ढूँढ़ता है जिनमें सर्च स्ट्रिंग मौजूद हो, और अंत में उन लाइनों को उसी क्रम में लौटाता है जिस क्रम में वे मिली थीं। जब एक से अधिक फाइलों में खोजा जाता है, तो हर मेल खाने वाली लाइन के आगे उस फाइल का नाम और एक कोलन (':') लगा दिया जाता है।

फ्लैग

grep कमांड निम्नलिखित फ्लैग का समर्थन करता है:

  • -n आउटपुट की हर लाइन के आगे उसकी संख्या और एक कोलन (':') जोड़िए, और संख्या को फाइल के नाम के बाद रखिए (अगर नाम मौजूद हो)।
  • -l केवल उन फाइलों के नाम प्रदर्शित कीजिए जिनमें कम से कम एक मेल खाने वाली लाइन हो।
  • -i छोटे-बड़े अक्षरों में अंतर किए बिना मिलान कीजिए।
  • -v प्रोग्राम का व्यवहार उलट दीजिए, यानी उन सभी लाइनों को इकट्ठा कीजिए जो मेल नहीं खातीं।
  • -x केवल उन्हीं लाइनों को खोजिए जिनमें सर्च स्ट्रिंग पूरी लाइन से मेल खाती हो।

Node प्रोसेस

बाकी अभ्यासों से अलग, grep.js को टेस्ट फाइल grep.spec.js के अंदर इम्पोर्ट नहीं किया जाता। इसके बजाय इसका इस्तेमाल ऐसे किया जाएगा जैसे यह कोई एक्ज़ीक्यूटेबल हो। इसे आसान बनाने के लिए grep.js फाइल को एक शीबैंग और एक कमेंट के साथ तैयार किया गया है, जो बताता है कि यह क्या करता है:

#!/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 का उपयोग कीजिए।

अगर स्टैंडर्ड एरर स्ट्रीम पर कुछ नहीं लिखा जाता, तो टेस्ट चलने को सफल (resolved) मानते हैं, और अगर स्टैंडर्ड एरर स्ट्रीम पर कुछ लिखा जाता है, तो उसे असफल (rejected) मानते हैं।

GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
JavaScript Exercism

Grep शुरू करने के लिए तैयार हैं?

Exercism पर साइन अप कीजिए और JavaScript को 37 कॉन्सेप्ट159 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।