आपने एक स्थानीय पुस्तकालय में नौकरी कर ली है, जहाँ आप पुरानी किताबों के संग्रह को व्यवस्थित करने में मदद करते हैं। छात्र पाठक अक्सर अपने टर्म पेपर में उद्धृत करने के लिए आधे-अधूरे याद रह गए उद्धरण ढूँढते रहते हैं। हर किताब को शुरू से अंत तक खुद पढ़ने के बजाय, आप एक छोटा टूल बनाने का फैसला करते हैं, जो उन किताबों को स्कैन करके इन अधूरे उद्धरणों को खोज निकाले।
फाइलों में ऐसी लाइनें खोजिए जो सर्च स्ट्रिंग से मेल खाती हों, और मेल खाने वाली सभी लाइनें लौटाइए।
Unix का grep कमांड फाइलों में ऐसी लाइनें खोजता है जो किसी रेगुलर एक्सप्रेशन से मेल खाती हों। आपको एक सरल grep कमांड बनाना है, जो तय स्ट्रिंग खोज सके।
grep कमांड तीन आर्गुमेंट लेता है:
इसके बाद यह दी गई फाइलों को उसी क्रम में पढ़ता है जिस क्रम में उनके नाम दिए गए हैं। फिर उन लाइनों को ढूँढ़ता है जिनमें सर्च स्ट्रिंग मौजूद हो, और अंत में उन लाइनों को उसी क्रम में लौटाता है जिस क्रम में वे मिली थीं। जब एक से अधिक फाइलों में खोजा जाता है, तो हर मेल खाने वाली लाइन के आगे उस फाइल का नाम और एक कोलन (':') लगा दिया जाता है।
grep कमांड निम्नलिखित फ्लैग का समर्थन करता है:
-n आउटपुट की हर लाइन के आगे उसकी संख्या और एक कोलन (':') जोड़िए, और संख्या को फाइल के नाम के बाद रखिए (अगर नाम मौजूद हो)।-l केवल उन फाइलों के नाम प्रदर्शित कीजिए जिनमें कम से कम एक मेल खाने वाली लाइन हो।-i छोटे-बड़े अक्षरों में अंतर किए बिना मिलान कीजिए।-v प्रोग्राम का व्यवहार उलट दीजिए, यानी उन सभी लाइनों को इकट्ठा कीजिए जो मेल नहीं खातीं।-x केवल उन्हीं लाइनों को खोजिए जिनमें सर्च स्ट्रिंग पूरी लाइन से मेल खाती हो।यह अभ्यास anyhow क्रेट से परिचित कराता है, जो किसी भी तरह के एरर को संभालना आसान बनाती है।
इसका उद्देश्य यह सुनिश्चित करना है कि जब आप कोई एप्लिकेशन लिख रहे हों, तो आपको इस बात की चिंता न करनी पड़े कि आपका कॉल किया गया फंक्शन कौन से एरर लौटा रहा है। उन्हें आगे बढ़ाते समय आपको बस सही काम करना है।
ध्यान दें: वास्तव में यह कुछ हद तक अच्छा तरीका नहीं माना जाता कि लाइब्रेरी लिखते समय anyhow का इस्तेमाल किया जाए, जैसा कि हम यहाँ कर रहे हैं। लाइब्रेरी लिखते समय अपना Error एनम बनाना ज़्यादा स्पष्ट और ज़्यादा उपयोगी होता है (हो सकता है, thiserror क्रेट जैसे हेल्पर मैक्रो की मदद से)। फिर भी, इस क्रेट का उपयोग दिखाने के लिए हम यहाँ जानबूझकर और स्पष्ट रूप से ऐसा कर रहे हैं।
इस क्रेट के बारे में और जानने के लिए इसका डॉक्युमेंटेशन देखिए।
इस अभ्यास में आपसे grep के सिर्फ सबसे बुनियादी फंक्शन बनाने के लिए कहा गया है, लेकिन वास्तव में एक प्रोजेक्ट ऐसा भी है जो Rust में grep को पूरी तरह दोबारा बनाता है, यानी ripgrep।
अगर आपको Rust में बुनियादी यूटिलिटी प्रोग्राम दोबारा लिखने का विचार पसंद आया, तो इन प्रोजेक्टों को ज़रूर देखिए: