Η εντολή grep του Linux χρησιμοποιείται ως μέθοδος για την εισαγωγή φίλτρων. Το GREP αντιπροσωπεύει τον Παγκόσμιο Εκτυπωτή Κανονικής Έκφρασης και επομένως για να το χρησιμοποιήσετε αποτελεσματικά, θα πρέπει να έχετε κάποιες γνώσεις σχετικά με τις κανονικές εκφράσεις.
Σε αυτό το άρθρο, θα μάθετε πολλά παραδείγματα που θα σας βοηθήσουν να κατανοήσετε την εντολή grep.
01 από 09Πώς να αναζητήσετε μια συμβολοσειρά σε ένα αρχείο χρησιμοποιώντας το GREP
Φανταστείτε ότι έχετε ένα αρχείο κειμένου που ονομάζεται βιβλίο με τους ακόλουθους τίτλους παιδικών βιβλίων:
- Ρομπέν των Δασών
- Κοκκινοσκουφίτσα
- Peter Pan
- Χρυσόλιξες και οι τρεις αρκούδες
- Η ΧΙΟΝΑΤΗ και ΟΙ ΕΠΤΑ ΝΑΝΟΙ
- Pinnochio
- Η γάτα στο καπέλο
- Τα τρία μικρά γουρουνάκια
- Το Γκρουφάλο
- Ο Τσάρλι και το εργοστάσιο σοκολάτας
Για να βρείτε όλα τα βιβλία με τη λέξη "The" στον τίτλο θα χρησιμοποιούσατε την ακόλουθη σύνταξη:
grep Τα βιβλίαΘα επιστραφούν τα ακόλουθα αποτελέσματα:
- Χρυσόλιξες και οι τρεις αρκούδες
- Η ΧΙΟΝΑΤΗ και ΟΙ ΕΠΤΑ ΝΑΝΟΙ
- Η γάτα στο καπέλο
- Τα τρία μικρά γουρουνάκια
- Το Γκρουφάλο
- Ο Τσάρλι και το εργοστάσιο σοκολάτας
Σε κάθε περίπτωση, η λέξη "Το" θα επισημανθεί.
Στην αναζήτηση γίνεται διάκριση πεζών-κεφαλαίων, οπότε αν ένας από τους τίτλους είχε "το" αντί "The" τότε δεν θα είχε επιστραφεί.
Για να αγνοήσετε την περίπτωση, μπορείτε να προσθέσετε τον ακόλουθο διακόπτη:
γράψτε τα βιβλία - αρχική περίπτωσηΜπορείτε επίσης να χρησιμοποιήσετε το διακόπτη -i ως εξής:
Συνεχίστε την ανάγνωση παρακάτω
02 του 09Αναζήτηση για μια συμβολοσειρά σε αρχείο χρησιμοποιώντας Wildcards
Η εντολή grep είναι πολύ ισχυρή. Μπορείτε να χρησιμοποιήσετε πολλές τεχνικές αντιστοίχισης προτύπων για να φιλτράρετε τα αποτελέσματα.
Σε αυτό το παράδειγμα, θα σας δείξω πώς να αναζητήσετε μια συμβολοσειρά σε ένα αρχείο χρησιμοποιώντας μπαλαντέρ.
Φανταστείτε ότι έχετε ένα αρχείο που ονομάζεται μέρη με τα ακόλουθα ονόματα χώρων της Σκωτίας:
είδος σκωτσέζικου τερριέaberystwythaberlourαναστροφήαναστροφήNewburghνέο ελάφινέο gallowayΓλασκώβηΕδιμβούργοΑν θέλετε να βρείτε όλα τα μέρη με αναστροφή στο όνομα χρησιμοποιήστε την ακόλουθη σύνταξη:
grep inver * placesΟ χαρακτήρας αστερίσκου (*) αντιστοιχεί σε 0 ή σε πολλά. Επομένως, αν έχετε ένα μέρος που ονομάζεται inver ή ένα μέρος που ονομάζεται Inverness τότε και οι δύο θα επιστραφούν.
Ένα άλλο wildcard που μπορείτε να χρησιμοποιήσετε είναι η περίοδος (.). Μπορείτε να χρησιμοποιήσετε αυτό για να ταιριάζει με ένα μόνο γράμμα.
grep inver.r placesΗ παραπάνω εντολή θα βρούσε μέρη που ονομάζονταν inververs και inververse, αλλά δεν θα βρίσκουν παραμορφώσεις επειδή μπορεί να υπάρχει μόνο ένα wildcard μεταξύ των δύο r όπως υποδηλώνεται από την ενιαία περίοδο.
Το wildcard περιόδου είναι χρήσιμο, αλλά μπορεί να προκαλέσει προβλήματα αν έχετε ένα ως μέρος του κειμένου που αναζητάτε.
Για παράδειγμα, εξετάστε αυτή τη λίστα ονομάτων τομέα
- linux.about.com
- pcsupport.about.com
- mp3.about.com
- minecraft.about.com
- androidgames.about.com
- netforbeginners.about.com
- everydaylinuxuser.com
- google.co.uk
- google.au
- direct.gov.uk
Για να βρείτε όλα τα .coms που μπορείτε να αναζητήσετε χρησιμοποιώντας την ακόλουθη σύνταξη:
grep * about * domainnamesΗ παραπάνω εντολή θα πέσει κάτω εάν η λίστα περιέχει το ακόλουθο όνομα:
- everydaylinuxuser.com/about.html
Θα μπορούσατε λοιπόν να δοκιμάσετε την ακόλουθη σύνταξη:
grep * about.com domainnamesΑυτό θα λειτουργούσε εντάξει αν δεν υπήρχε ένας τομέας με το ακόλουθο όνομα:
aboutycom.comΓια να αναζητήσετε πραγματικά τον όρο about.com θα πρέπει να ξεφύγετε από την τελεία ως εξής:
grep * για ονόματα τομέα .comΟ τελικός χαρακτήρας για να σας δείξει είναι το ερωτηματικό που σημαίνει μηδέν ή ένα χαρακτήρα.
Για παράδειγμα:
grep? ber placenamesΗ παραπάνω εντολή θα επέστρεφε aberdeen, aberystwyth ή ακόμα και berwick.
Συνεχίστε την ανάγνωση παρακάτω
03 του 09Αναζήτηση για χορδές στην αρχή και στο τέλος της γραμμής Χρησιμοποιώντας grep
Το σύμβολο carat (^) και το δολάριο ($) σάς επιτρέπουν να αναζητήσετε μοτίβα στην αρχή και στο τέλος των γραμμών.
Φανταστείτε ότι έχετε ένα αρχείο που ονομάζεται ποδόσφαιρο με τα ακόλουθα ονόματα ομάδων:
- Μπλάκπουλ
- Λίβερπουλ
- Πόλη του Μάντσεστερ
- της πόλης Leicester
- Μάντσεστερ Γιουνάιτεντ
- Νιουκάστλ
- Μάντσεστερ Σίτι
Αν θελήσατε να βρείτε όλες τις ομάδες που ξεκίνησαν με το Μάντσεστερ θα χρησιμοποιούσατε την ακόλουθη σύνταξη:
grep ^ Μάντσεστερ ομάδεςΗ παραπάνω εντολή θα επέστρεφε το Μάντσεστερ Σίτι και τη Μάντσεστερ Γιουνάιτεντ, αλλά όχι η FC United Of Manchester
Εναλλακτικά, μπορείτε να βρείτε όλες τις ομάδες που τελειώνουν με την United χρησιμοποιώντας την ακόλουθη σύνταξη:
grep United ομάδεςΗ παραπάνω εντολή θα επέστρεφε στη Μάντσεστερ Γιουνάιτεντ και στο Νιουκάστλ Ηνωμένο, αλλά όχι στην FC United Of Manchester.
04 του 09Μετρώντας τον αριθμό των αγώνων Χρησιμοποιώντας grep
Αν δεν θέλετε να επιστρέψετε τις πραγματικές γραμμές που ταιριάζουν με ένα μοτίβο χρησιμοποιώντας grep, αλλά απλά θέλετε να μάθετε πόσοι υπάρχουν μπορείτε να χρησιμοποιήσετε την ακόλουθη σύνταξη:
grep -c patternfileΕάν το μοτίβο αντιστοιχούσε δύο φορές, τότε θα επιστρεφόταν ο αριθμός 2.
Συνεχίστε την ανάγνωση παρακάτω
05 του 09Εύρεση όλων των όρων που δεν ταιριάζουν με grep
Φανταστείτε ότι έχετε μια λίστα με ονόματα θέσεων με τις χώρες που αναφέρονται ως εξής:
- aberdeen Σκωτία
- Γλασκώβη Σκωτία
- Ηράκλειο Αγγλία
- κολουίν κόλπο
- Λονδίνο, Αγγλία
Μπορεί να έχετε παρατηρήσει ότι ο κόλπος Colwyn δεν έχει καμία χώρα συνδεδεμένη με αυτό.
Για να αναζητήσετε όλα τα μέρη με μια χώρα, μπορείτε να χρησιμοποιήσετε την ακόλουθη σύνταξη:
grep land $ placesΤα αποτελέσματα επιστρέφουν σε όλους τους τόπους εκτός από τον κόλπο colwyn.
Αυτό προφανώς λειτουργεί μόνο για χώρους που καταλήγουν σε γη (ελάχιστα επιστημονικά).
Μπορείτε να αντιστρέψετε την επιλογή χρησιμοποιώντας την ακόλουθη σύνταξη:
grep -v γη $ θέσειςΑυτό θα βρει όλα τα μέρη που δεν τελειώνουν με τη γη.
06 του 09Πώς να βρείτε κενές γραμμές σε αρχεία χρησιμοποιώντας grep
Φανταστείτε ότι έχετε ένα αρχείο εισόδου που χρησιμοποιείται από μια εφαρμογή τρίτου μέρους που σταματά να διαβάζει το αρχείο όταν εντοπίσει μια κενή γραμμή ως εξής:
- aberdeen scotland
- σκωτία νηνεμίας
- Λουξεμβούργο
- Colwyn Bay Wales
Όταν η εφαρμογή φτάσει στη γραμμή μετά το Liverpool, θα σταματήσει να διαβάζει, πράγμα που σημαίνει ότι ο κόλπος Colwyn χάνεται εξ ολοκλήρου.
Μπορείτε να χρησιμοποιήσετε το grep για να αναζητήσετε κενές γραμμές με την ακόλουθη σύνταξη:
grep ^ $ θέσειςΔυστυχώς, αυτό δεν είναι ιδιαίτερα χρήσιμο επειδή επιστρέφει ακριβώς τις κενές γραμμές.
Θα μπορούσατε φυσικά να μετρήσετε τον αριθμό των κενών γραμμών ως έλεγχο για να δείτε αν το αρχείο είναι έγκυρο ως εξής:
grep -c ^ $ θέσειςΩστόσο, θα ήταν πιο χρήσιμο να γνωρίζετε τους αριθμούς γραμμών που έχουν μια κενή γραμμή ώστε να μπορείτε να τα αντικαταστήσετε. Μπορείτε να το κάνετε με την ακόλουθη εντολή:
grep -n ^ $ θέσειςΣυνεχίστε την ανάγνωση παρακάτω
07 του 09Πώς να αναζητήσετε χορδές των ανώτερων ή πεζών χαρακτήρων Χρησιμοποιώντας grep
Με τη χρήση του grep μπορείτε να προσδιορίσετε ποιες γραμμές σε ένα αρχείο έχουν κεφαλαίους χαρακτήρες χρησιμοποιώντας την ακόλουθη σύνταξη:
grep 'A-Z'Οι αγκύλες σας επιτρέπουν να προσδιορίσετε το εύρος χαρακτήρων. Στο παραπάνω παράδειγμα αντιστοιχεί σε οποιονδήποτε χαρακτήρα που βρίσκεται μεταξύ Α και Ζ.
Επομένως, για να ταιριάξετε πεζούς χαρακτήρες μπορείτε να χρησιμοποιήσετε την ακόλουθη σύνταξη:
grep 'a-z'Αν θέλετε να αντιστοιχίσετε μόνο γράμματα και όχι αριθμητικά ή άλλα σύμβολα, μπορείτε να χρησιμοποιήσετε την ακόλουθη σύνταξη:
grep 'a-zA-Z'Μπορείτε να κάνετε το ίδιο με αριθμούς ως εξής:
grep '0-9' όνομα αρχείου 08 από 09Ψάχνετε για επαναλαμβανόμενα μοτίβα Χρησιμοποιώντας grep
Μπορείτε να χρησιμοποιήσετε σγουρά αγκύλια {} για να αναζητήσετε ένα επαναλαμβανόμενο μοτίβο.
Φανταστείτε ότι έχετε ένα αρχείο με αριθμούς τηλεφώνου ως εξής:
- 055-1234
- 055-4567
- 555-1545
- 444-0167
- 444-0854
- 4549-2234
- x44-1234
Γνωρίζετε ότι το πρώτο μέρος του αριθμού πρέπει να είναι τρία ψηφία και θέλετε να βρείτε τις γραμμές που δεν ταιριάζουν με αυτό το μοτίβο.
Από το προηγούμενο παράδειγμα γνωρίζετε ότι το 0-9 επιστρέφει όλους τους αριθμούς σε ένα αρχείο.
Σε αυτή την περίπτωση θέλουμε τις γραμμές που ξεκινούν με τρεις αριθμούς και ακολουθεί ένα παύλα (-). Μπορείτε να το κάνετε αυτό με την ακόλουθη σύνταξη:
grep "^ 0-9 0-9 0-9 -" αριθμοίΌπως γνωρίζουμε από τα προηγούμενα παραδείγματα, το καράτι (^) σημαίνει ότι η γραμμή πρέπει να αρχίζει με το ακόλουθο μοτίβο.
Το 0-9 θα αναζητήσει οποιονδήποτε αριθμό μεταξύ 0 και 9. Δεδομένου ότι αυτό περιλαμβάνεται τρεις φορές αντιστοιχεί σε 3 αριθμούς. Τέλος, υπάρχει ένα παύλα για να υποδηλώσει ότι μια παύλα πρέπει να επιτύχει τους τρεις αριθμούς.
Χρησιμοποιώντας τις σγουρές αγκύλες μπορείτε να κάνετε την αναζήτηση μικρότερη ως εξής:
grep "^ 0-9 {3 } -" αριθμοίΗ κάθετο από το {bracket έτσι ώστε να λειτουργεί ως μέρος της κανονικής έκφρασης αλλά στην ουσία αυτό που λέει είναι 0-9 {3} που σημαίνει ότι οποιοσδήποτε αριθμός είναι μεταξύ 0 και 9 τρεις φορές.
Οι σγουρές αγκύλες μπορούν επίσης να χρησιμοποιηθούν ως εξής:
{5,10}{5,}Το {5,10} σημαίνει ότι ο αναζητούμενος χαρακτήρας πρέπει να επαναλαμβάνεται τουλάχιστον 5 φορές αλλά όχι περισσότερο από 10 ενώ το {5,} σημαίνει ότι ο χαρακτήρας πρέπει να επαναλαμβάνεται τουλάχιστον 5 φορές αλλά μπορεί να είναι περισσότερο από αυτό.
Συνεχίστε την ανάγνωση παρακάτω
09 του 09Χρησιμοποιώντας την έξοδο από άλλες εντολές Χρησιμοποιώντας grep
Μέχρι στιγμής εξετάσαμε την αντιστοίχιση προτύπων στα μεμονωμένα αρχεία, αλλά η grep μπορεί να χρησιμοποιήσει την έξοδο από άλλες εντολές ως είσοδο για αντιστοίχιση προτύπων.
Ένα καλό παράδειγμα αυτού είναι η χρήση της εντολής ps που αναφέρει τις ενεργές διαδικασίες.
Για παράδειγμα, εκτελέστε την ακόλουθη εντολή:
ps -efΘα εμφανιστούν όλες οι τρέχουσες διαδικασίες στο σύστημά σας.
Μπορείτε να χρησιμοποιήσετε το grep για να αναζητήσετε μια συγκεκριμένη διαδικασία εκτέλεσης ως εξής:
ps -ef | grep firefoxΠερίληψη
Η εντολή grep είναι μια βασική εντολή Linux και αξίζει να μάθει, καθώς θα κάνει πολύ πιο εύκολη τη ζωή σας κατά την αναζήτηση αρχείων και διαδικασιών κατά τη χρήση του τερματικού.