Έπιασες δουλειά σε μια τοπική βιβλιοθήκη, βοηθώντας στην οργάνωση της συλλογής παλιών βιβλίων της. Οι φοιτητές που την επισκέπτονται συχνά ψάχνουν μισοθυμημένα αποσπάσματα για να τα παραθέσουν στις εργασίες τους. Αντί να διαβάσεις χειροκίνητα κάθε βιβλίο από την αρχή ως το τέλος, αποφασίζεις να φτιάξεις ένα μικρό εργαλείο για να τα σαρώνει, ψάχνοντας για αυτά τα ημιτελή αποσπάσματα.
Ψάξε σε αρχεία για γραμμές που ταιριάζουν με μια συμβολοσειρά αναζήτησης και επέστρεψε όλες τις γραμμές που ταιριάζουν.
Η εντολή grep του Unix ψάχνει σε αρχεία για γραμμές που ταιριάζουν με μια κανονική έκφραση.
Η αποστολή σου είναι να υλοποιήσεις μια απλοποιημένη εντολή grep, η οποία υποστηρίζει αναζήτηση για σταθερές συμβολοσειρές.
Η εντολή grep δέχεται τρία ορίσματα:
Στη συνέχεια, διαβάζει τα περιεχόμενα των αρχείων που δίνονται (με τη σειρά που δίνονται), βρίσκει τις γραμμές που περιέχουν τη συμβολοσειρά αναζήτησης και, τέλος, επιστρέφει αυτές τις γραμμές με τη σειρά με την οποία βρέθηκαν. Όταν η αναζήτηση γίνεται σε πολλά αρχεία, μπροστά από κάθε γραμμή που ταιριάζει μπαίνει το όνομα του αρχείου και μία άνω και κάτω τελεία (':').
Η εντολή grep υποστηρίζει τις εξής σημαίες:
-n Βάζει τον αριθμό της γραμμής και μία άνω και κάτω τελεία (':') μπροστά από κάθε γραμμή της εξόδου, τοποθετώντας τον αριθμό μετά το όνομα του αρχείου (αν υπάρχει).-l Εμφανίζει μόνο τα ονόματα των αρχείων που περιέχουν τουλάχιστον μία γραμμή που ταιριάζει.-i Κάνει αντιστοίχιση αγνοώντας πεζά και κεφαλαία.-v Αντιστρέφει τη λειτουργία του προγράμματος: συλλέγει όλες τις γραμμές που δεν ταιριάζουν.-x Αναζητά μόνο γραμμές στις οποίες η συμβολοσειρά αναζήτησης ταιριάζει με ολόκληρη τη γραμμή.Το Powershell υποστηρίζει παραμέτρους switch για συναρτήσεις, οι οποίες συμπεριφέρονται παρόμοια με τις σημαίες στη γραμμή εντολών.
Ακολουθώντας τη συνήθεια του Powershell να δίνει λεπτομερή και αναλυτικά ονόματα στα cmdlets και τις ιδιότητές του, οι σημαίες που χρησιμοποιούνται σε αυτή την άσκηση έχουν επίσης αλλάξει όνομα, ώστε να αντικατοπτρίζουν τη γλώσσα.
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 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.