Πώς να χρησιμοποιήσετε την εντολή Grep στο Linux [12 Χρήσιμα Παραδείγματα]


Έχετε βρεθεί ποτέ αντιμέτωπος με το καθήκον να αναζητήσετε μια συγκεκριμένη συμβολοσειρά ή μοτίβο σε ένα αρχείο, αλλά δεν έχετε ιδέα από πού να αρχίσετε να ψάχνετε; Λοιπόν, εδώ είναι η εντολή grep για διάσωση!

Το grep είναι ένα ισχυρό πρόγραμμα αναζήτησης μοτίβων αρχείων που διατίθεται σε κάθε διανομή του Linux. Εάν για οποιονδήποτε λόγο, δεν είναι εγκατεστημένο στο σύστημά σας, μπορείτε εύκολα να το εγκαταστήσετε μέσω του διαχειριστή πακέτων, όπως φαίνεται.

sudo apt install grep         [On Debian, Ubuntu and Mint]
sudo yum install grep         [On RHEL/CentOS/Fedora and Rocky Linux/AlmaLinux]
sudo emerge -a sys-apps/grep  [On Gentoo Linux]
sudo apk add grep             [On Alpine Linux]
sudo pacman -S grep           [On Arch Linux]
sudo zypper install grep      [On OpenSUSE]    

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

1. Αναζήτηση και Εύρεση αρχείων στο Linux

Ας υποθέσουμε ότι μόλις εγκαταστήσατε ένα νέο αντίγραφο του νέου Ubuntu στον υπολογιστή σας και ότι πρόκειται να δώσετε μια ευκαιρία στο σενάριο Python.

Ψάχνετε στον ιστό αναζητώντας μαθήματα, αλλά βλέπετε ότι υπάρχουν δύο διαφορετικές εκδόσεις της Python σε χρήση και δεν γνωρίζετε ποια έκδοση της Python είναι εγκατεστημένη στο Ubuntu από το πρόγραμμα εγκατάστασης ή εάν έχει εγκαταστήσει κάποια modules.

Απλώς εκτελέστε την ακόλουθη εντολή dpkg με grep όπως φαίνεται:

dpkg -l | grep -i python

Αρχικά, εκτελέσαμε το dpkg –l, το οποίο παραθέτει τα εγκατεστημένα πακέτα *.deb στο σύστημά σας. Δεύτερον, διοχετεύσαμε αυτήν την έξοδο στο grep -i python, το οποίο απλώς δηλώνει "πηγαίνετε στο grep και φιλτράρετε και επιστρέψτε τα πάντα με "python" σε αυτό. ”

Η επιλογή -i υπάρχει για παράβλεψη πεζών-κεφαλαίων, καθώς το grep κάνει διάκριση πεζών-κεφαλαίων. Η χρήση της επιλογής -i είναι μια καλή συνήθεια, εκτός εάν, φυσικά, προσπαθείτε να ολοκληρώσετε μια πιο συγκεκριμένη αναζήτηση.

2. Αναζήτηση και φιλτράρισμα αρχείων στο Linux

Το grep μπορεί επίσης να χρησιμοποιηθεί για αναζήτηση και φιλτράρισμα σε μεμονωμένα αρχεία ή πολλαπλά αρχεία. Ας πάρουμε αυτό το σενάριο:

Αντιμετωπίζετε κάποιο πρόβλημα με τον Διακομιστή Ιστού Apache σας και έχετε απευθυνθεί σε ένα από τα πολλά καταπληκτικά φόρουμ στο διαδίκτυο ζητώντας βοήθεια.

Η ευγενική ψυχή που σας απαντά σας ζήτησε να δημοσιεύσετε τα περιεχόμενα του αρχείου σας /etc/apache2/apache2.conf. Δεν θα ήταν πιο εύκολο για εσάς, τον τύπο που σας βοηθά και όλους όσους το διαβάζουν, αν μπορούσατε να αφαιρέσετε όλες τις γραμμές που σχολιάζονταν; Λοιπόν, μπορείς! Απλώς εκτελέστε αυτό:

grep -v ^\# /etc/apache2/apache2.conf | grep .

Η επιλογή -v λέει στο grep να αντιστρέψει την έξοδό του, πράγμα που σημαίνει ότι αντί να εκτυπώσετε αντίστοιχες γραμμές, κάντε το αντίθετο και εκτυπώστε όλες τις γραμμές που δεν ταιριάζουν με την έκφραση, Σε αυτήν την περίπτωση, οι γραμμές σχολιασμού #.

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

3. Βρείτε όλα τα αρχεία .mp3 στο Linux

Το grep μπορεί να είναι πολύ χρήσιμο για φιλτράρισμα από το stdout. Για παράδειγμα, ας πούμε ότι έχετε έναν ολόκληρο φάκελο γεμάτο αρχεία μουσικής σε μια δέσμη διαφορετικών μορφών.

Θέλετε να βρείτε όλα τα αρχεία *.mp3 από τον καλλιτέχνη JayZ, αλλά δεν θέλετε κανένα από τα κομμάτια που έχουν αναμιχθεί. Η χρήση μιας εντολής εύρεσης με δύο σωλήνες grep θα κάνει το κόλπο:

find . -name “*.mp3” | grep –i JayZ | grep –vi “remix”

Σε αυτό το παράδειγμα, χρησιμοποιούμε το find για να εκτυπώσουμε όλα τα αρχεία με επέκταση *.mp3, τοποθετώντας το στο grep –i για να φιλτράρετε βγάλτε και εκτυπώστε όλα τα αρχεία με το όνομα "JayZ " και, στη συνέχεια, μια άλλη διοχέτευση στο grep –vi που φιλτράρει και δεν εκτυπώνει όλα τα ονόματα αρχείων με τη συμβολοσειρά (σε καμία περίπτωση) "remix ".

4. Εμφανίστε τον αριθμό των γραμμών πριν ή μετά τη συμβολοσειρά αναζήτησης

Άλλες δύο επιλογές είναι οι διακόπτες -A και -B, οι οποίοι εμφανίζουν την αντιστοιχισμένη γραμμή και έναν αριθμό γραμμών είτε πριν είτε μετά τη συμβολοσειρά αναζήτησης.

Ενώ η σελίδα man παρέχει μια πιο λεπτομερή εξήγηση, θεωρώ ότι είναι πιο εύκολο να θυμάμαι τις επιλογές ως -A=after και -B=πριν:

ifconfig | grep -A 4 inet
ifconfig | grep -B 2 UP

5. Εκτυπώνει τον αριθμό των γραμμών γύρω από το ταίριασμα

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

ifconfig | grep -C 2 lo

 TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 15314  bytes 1593769 (1.5 MB)
        RX errors 0  dropped 0  overruns 0  frame 0

6. Μετρήστε τον αριθμό των αγώνων

Παρόμοια με τη σωλήνωση μιας συμβολοσειράς grep σε μέτρηση λέξεων (εντολή wc) η ενσωματωμένη επιλογή του grep μπορεί να κάνει το ίδιο για εσάς:

ifconfig | grep -c inet6

7. Αναζήτηση αρχείων με δεδομένη συμβολοσειρά στο Linux

Η επιλογή –n για το grep είναι πολύ χρήσιμη κατά τον εντοπισμό σφαλμάτων αρχείων κατά τη διάρκεια σφαλμάτων μεταγλώττισης. Εμφανίζει τον αριθμό γραμμής στο αρχείο της συγκεκριμένης συμβολοσειράς αναζήτησης:

grep -n "main" setup.py

8. Αναζητήστε μια συμβολοσειρά Αναδρομικά σε όλους τους Καταλόγους

Εάν θέλετε να αναζητήσετε μια συμβολοσειρά στον τρέχοντα κατάλογο μαζί με όλους τους υποκαταλόγους, μπορείτε να καθορίσετε την επιλογή –r για αναδρομική αναζήτηση:

grep -r “function” *

9. Αναζητήστε ολόκληρο το μοτίβο

Περνώντας την επιλογή -w στο grep αναζητείται ολόκληρο το μοτίβο που βρίσκεται στη συμβολοσειρά. Για παράδειγμα, χρησιμοποιώντας:

ifconfig | grep -w "RUNNING"

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

ifconfig | grep -w "RUN"

Τίποτα δεν θα επιστραφεί καθώς δεν αναζητούμε ένα μοτίβο, αλλά μια ολόκληρη λέξη.

10. Αναζητήστε μια συμβολοσειρά στα αρχεία Gzipped

Αξίζουν κάποιας αναφοράς τα παράγωγα του grep. Το πρώτο είναι το zgrep, το οποίο, παρόμοιο με το zcat, προορίζεται για χρήση σε αρχεία gzip. Παίρνει τις ίδιες επιλογές με το grep και χρησιμοποιείται με τον ίδιο τρόπο:

zgrep -i error /var/log/syslog.2.gz

11. Αντιστοιχίστε κανονικές εκφράσεις σε αρχεία

Η εντολή egrep είναι ένα άλλο παράγωγο που σημαίνει "Εκτεταμένη καθολική κανονική έκφραση". Αναγνωρίζει πρόσθετους μεταχαρακτήρες έκφρασης όπως at + ? | και ().

Η εντολή egrep είναι πολύ χρήσιμη για την αναζήτηση αρχείων πηγής και άλλων κομματιών κώδικα, εάν παραστεί ανάγκη. Μπορεί να κληθεί από το κανονικό grep καθορίζοντας την επιλογή -E.

grep -E

12. Αναζητήστε μια συμβολοσειρά σταθερού μοτίβου

Η εντολή fgrep αναζητά ένα αρχείο ή μια λίστα αρχείων για μια σταθερή συμβολοσειρά μοτίβου. Είναι το ίδιο με το grep -F. Ένας συνηθισμένος τρόπος χρήσης του fgrep είναι να του περάσετε ένα αρχείο μοτίβων:

fgrep –f file_full_of_patterns.txt file_to_search.txt

Αυτό είναι απλώς ένα σημείο εκκίνησης με το grep, αλλά όπως πιθανότατα μπορείτε να δείτε, είναι ανεκτίμητο για διάφορους σκοπούς. Εκτός από τις απλές εντολές μιας γραμμής που έχουμε εφαρμόσει, το grep μπορεί να χρησιμοποιηθεί για τη σύνταξη ισχυρών εργασιών cron και ισχυρών σεναρίων κελύφους, για αρχή.

Γίνετε δημιουργικοί, πειραματιστείτε με τις επιλογές στη σελίδα man και βρείτε εκφράσεις grep που εξυπηρετούν τους δικούς σας σκοπούς!