Παράδειγμα χρήσεων της εντολής grep του Linux

Εισαγωγή

Η εντολή grep του Linux χρησιμοποιείται ως μέθοδος για την εισαγωγή φίλτρων.

Το GREP αντιπροσωπεύει τον Παγκόσμιο Εκτυπωτή Κανονικής Έκφρασης και επομένως για να το χρησιμοποιήσετε αποτελεσματικά, θα πρέπει να έχετε κάποιες γνώσεις σχετικά με τις κανονικές εκφράσεις.

Σε αυτό το άρθρο, θα σας παρουσιάσω ορισμένα παραδείγματα που θα σας βοηθήσουν να κατανοήσετε την εντολή grep.

01 από 09

Πώς να αναζητήσετε μια συμβολοσειρά σε ένα αρχείο χρησιμοποιώντας το GREP

Η εντολή grep Linux.

Φανταστείτε ότι έχετε ένα αρχείο κειμένου που ονομάζεται βιβλίο με τους ακόλουθους τίτλους παιδικών βιβλίων:

Για να βρείτε όλα τα βιβλία με τη λέξη "The" στον τίτλο θα χρησιμοποιούσατε την ακόλουθη σύνταξη:

grep Τα βιβλία

Θα επιστραφούν τα ακόλουθα αποτελέσματα:

Σε κάθε περίπτωση, η λέξη "Το" θα επισημανθεί.

Σημειώστε ότι στην αναζήτηση γίνεται διάκριση πεζών-κεφαλαίων, οπότε αν ένας από τους τίτλους είχε "the" αντί "The" τότε δεν θα είχε επιστραφεί.

Για να αγνοήσετε την περίπτωση, μπορείτε να προσθέσετε τον ακόλουθο διακόπτη:

γράψτε τα βιβλία - αρχική περίπτωση

Μπορείτε επίσης να χρησιμοποιήσετε το διακόπτη -i ως εξής:

grep -i τα βιβλία

02 του 09

Αναζήτηση για μια συμβολοσειρά σε αρχείο χρησιμοποιώντας Wildcards

Η εντολή grep είναι πολύ ισχυρή. Μπορείτε να χρησιμοποιήσετε πολλές τεχνικές αντιστοίχισης προτύπων για να φιλτράρετε τα αποτελέσματα.

Σε αυτό το παράδειγμα, θα σας δείξω πώς να αναζητήσετε μια συμβολοσειρά σε ένα αρχείο χρησιμοποιώντας μπαλαντέρ .

Φανταστείτε ότι έχετε ένα αρχείο που ονομάζεται μέρη με τα ακόλουθα ονόματα χώρων της Σκωτίας:

είδος σκωτσέζικου τερριέ

aberystwyth

aberlour

αναστροφή

αναστροφή

Newburgh

νέο ελάφι

νέο galloway

Γλασκώβη

Εδιμβούργο

Αν θέλετε να βρείτε όλα τα μέρη με αναστροφή στο όνομα χρησιμοποιήστε την ακόλουθη σύνταξη:

grep inver * places

Ο χαρακτήρας αστερίσκου (*) αντιστοιχεί σε 0 ή σε πολλά. Επομένως, αν έχετε έναν τόπο που ονομάζεται inver ή ένα μέρος που ονομάζεται inververs τότε και οι δύο θα επιστραφούν.

Ένα άλλο wildcard που μπορείτε να χρησιμοποιήσετε είναι η περίοδος (.). Μπορείτε να χρησιμοποιήσετε αυτό για να ταιριάζει με ένα μόνο γράμμα.

grep inver.r places

Η παραπάνω εντολή θα βρούσε μέρη που ονομάζονταν inververs και inververse, αλλά δεν θα βρίσκουν παραμορφώσεις επειδή μπορεί να υπάρχει μόνο ένα wildcard μεταξύ των δύο r όπως υποδηλώνεται από την ενιαία περίοδο.

Το wildcard περιόδου είναι χρήσιμο, αλλά μπορεί να προκαλέσει προβλήματα αν έχετε ένα ως μέρος του κειμένου που αναζητάτε.

Για παράδειγμα, εξετάστε αυτή τη λίστα ονομάτων τομέα

Για να βρείτε όλα τα about.coms μπορείτε απλά να κάνετε αναζήτηση χρησιμοποιώντας την ακόλουθη σύνταξη:

grep * about * domainnames

Η παραπάνω εντολή θα πέσει κάτω εάν η λίστα περιέχει το ακόλουθο όνομα:

Θα μπορούσατε λοιπόν να δοκιμάσετε την ακόλουθη σύνταξη:

grep * about.com domainnames

Αυτό θα λειτουργούσε εντάξει αν δεν υπήρχε ένας τομέας με το ακόλουθο όνομα:

aboutycom.com

Για να αναζητήσετε πραγματικά τον όρο about.com θα πρέπει να ξεφύγετε από την τελεία ως εξής:

grep * για ονόματα τομέα \ .com

Ο τελικός χαρακτήρας για να σας δείξει είναι το ερωτηματικό που σημαίνει μηδέν ή ένα χαρακτήρα.

Για παράδειγμα:

grep? ber placenames

Η παραπάνω εντολή θα επέστρεφε aberdeen, aberystwyth ή ακόμα και berwick.

03 του 09

Αναζήτηση για χορδές στην αρχή και στο τέλος της γραμμής Χρησιμοποιώντας grep

Το σύμβολο carat (^) και το δολάριο ($) σάς επιτρέπουν να αναζητήσετε μοτίβα στην αρχή και στο τέλος των γραμμών.

Φανταστείτε ότι έχετε ένα αρχείο που ονομάζεται ποδόσφαιρο με τα ακόλουθα ονόματα ομάδων:

Αν θελήσατε να βρείτε όλες τις ομάδες που ξεκίνησαν με το Μάντσεστερ θα χρησιμοποιούσατε την ακόλουθη σύνταξη:

grep ^ Μάντσεστερ ομάδες

Η παραπάνω εντολή θα επέστρεφε το Μάντσεστερ Σίτι και τη Μάντσεστερ Γιουνάιτεντ, αλλά όχι η FC United Of Manchester

Εναλλακτικά μπορείτε να βρείτε όλες τις ομάδες που τελειώνουν με την United χρησιμοποιώντας την ακόλουθη σύνταξη:

grep United ομάδες

Η παραπάνω εντολή θα επέστρεφε στη Μάντσεστερ Γιουνάιτεντ και την Νιουκάστλ Ηνωμένη, αλλά όχι στην FC United Of Manchester

04 του 09

Μετρώντας τον αριθμό των αγώνων Χρησιμοποιώντας grep

Αν δεν θέλετε να επιστρέψετε τις πραγματικές γραμμές που ταιριάζουν με ένα μοτίβο χρησιμοποιώντας grep, αλλά απλά θέλετε να μάθετε πόσοι υπάρχουν μπορείτε να χρησιμοποιήσετε την ακόλουθη σύνταξη:

grep -c patternfile

Εάν το μοτίβο αντιστοιχούσε δύο φορές, τότε θα επιστρεφόταν ο αριθμός 2.

05 του 09

Εύρεση όλων των όρων που δεν ταιριάζουν με grep

Φανταστείτε ότι έχετε μια λίστα με ονόματα θέσεων με τις χώρες που αναφέρονται ως εξής:

Μπορεί να έχετε παρατηρήσει ότι ο κόλπος Colwyn δεν έχει καμία χώρα συνδεδεμένη με αυτό.

Για να αναζητήσετε όλα τα μέρη με μια χώρα, μπορείτε να χρησιμοποιήσετε την ακόλουθη σύνταξη:

grep land $ places

Τα αποτελέσματα επιστρέφουν σε όλους τους τόπους εκτός από τον κόλπο colwyn.

Αυτό προφανώς λειτουργεί μόνο για χώρους που καταλήγουν σε γη (ελάχιστα επιστημονικά).

Μπορείτε να αντιστρέψετε την επιλογή χρησιμοποιώντας την ακόλουθη σύνταξη:

grep -v γη $ θέσεις

Αυτό θα βρει όλα τα μέρη που δεν τελειώνουν με τη γη.

06 του 09

Πώς να βρείτε κενές γραμμές σε αρχεία χρησιμοποιώντας grep

Φανταστείτε ότι έχετε ένα αρχείο εισόδου που χρησιμοποιείται από μια εφαρμογή τρίτου μέρους που σταματά να διαβάζει το αρχείο όταν εντοπίσει μια κενή γραμμή ως εξής:

Όταν η εφαρμογή φτάσει στη γραμμή μετά το Liverpool, θα σταματήσει να διαβάζει, πράγμα που σημαίνει ότι ο κόλπος Colwyn χάνεται εξ ολοκλήρου.

Μπορείτε να χρησιμοποιήσετε το grep για να αναζητήσετε κενές γραμμές με την ακόλουθη σύνταξη:

grep ^ $ θέσεις

Δυστυχώς, αυτό δεν είναι ιδιαίτερα χρήσιμο επειδή επιστρέφει ακριβώς τις κενές γραμμές.

Θα μπορούσατε φυσικά να μετρήσετε τον αριθμό των κενών γραμμών ως έλεγχο για να δείτε αν το αρχείο είναι έγκυρο ως εξής:

grep -c ^ $ θέσεις

Ωστόσο, θα ήταν πιο χρήσιμο να γνωρίζετε τους αριθμούς γραμμών που έχουν μια κενή γραμμή ώστε να μπορείτε να τα αντικαταστήσετε. Μπορείτε να το κάνετε με την ακόλουθη εντολή:

grep -n ^ $ θέσεις

07 του 09

Πώς να αναζητήσετε χορδές των ανώτερων ή πεζών χαρακτήρων Χρησιμοποιώντας grep

Με τη χρήση του grep μπορείτε να προσδιορίσετε ποιες γραμμές σε ένα αρχείο έχουν κεφαλαίους χαρακτήρες χρησιμοποιώντας την ακόλουθη σύνταξη:

grep '[AZ]' όνομα αρχείου

Οι αγκύλες [] σας επιτρέπουν να προσδιορίσετε το εύρος χαρακτήρων. Στο παραπάνω παράδειγμα αντιστοιχεί σε οποιονδήποτε χαρακτήρα που είναι μεταξύ Α και Ζ.

Επομένως, για να ταιριάξετε πεζούς χαρακτήρες μπορείτε να χρησιμοποιήσετε την ακόλουθη σύνταξη:

grep '[az]' όνομα αρχείου

Αν θέλετε να αντιστοιχίσετε μόνο γράμματα και όχι αριθμητικά ή άλλα σύμβολα, μπορείτε να χρησιμοποιήσετε την ακόλουθη σύνταξη:

grep '[a-zA-Z]'

Μπορείτε να κάνετε το ίδιο με αριθμούς ως εξής:

grep '[0-9]' όνομα αρχείου

08 από 09

Ψάχνετε για επαναλαμβανόμενα μοτίβα Χρησιμοποιώντας grep

Μπορείτε να χρησιμοποιήσετε σγουρά αγκύλια {} για να αναζητήσετε ένα επαναλαμβανόμενο μοτίβο.

Φανταστείτε ότι έχετε ένα αρχείο με αριθμούς τηλεφώνου ως εξής:

Γνωρίζετε ότι το πρώτο μέρος του αριθμού πρέπει να είναι τρία ψηφία και θέλετε να βρείτε τις γραμμές που δεν ταιριάζουν με αυτό το μοτίβο.

Από το προηγούμενο παράδειγμα γνωρίζετε ότι το [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 και αξίζει να μάθει, καθώς θα κάνει πολύ πιο εύκολη τη ζωή σας κατά την αναζήτηση αρχείων και διαδικασιών κατά τη χρήση του τερματικού.