Το grep utility είναι ίσως ένα από τα πιο δημοφιλή εργαλεία στο linux. Χρησιμοποιείται για να φιλτράρουμε τα αποτελέσματα της εξόδου εντολών ή στην αναζήτηση συγκεκριμένων λέξεων μέσα σε ένα αρχείο. Σε αυτό το άρθρο προσπαθούμε να πάμε λίγο παρακάτω σε σχέση με αυτό που γνωρίζουμε οι περισσότεροι για το grep και να αναδείξουμε την πραγματική δύναμη του.

Τι είναι το grep

Το όνομα της εντολής grep είναι αρκτικόλεξο της φράσης «Global Regular Expression and Print». Στη βασική του χρήση η εντολή χρησιμοποιείται για την αναζήτηση μέσα σε αρχεία ή το φιλτράρισμα plain text data χρησιμοποιώντας κάποιες από τις καλές συνήθειες που είδαμε σε παλιότερο άρθρο.

Βασική σύνταξη του grep

cat <όνομα αρχείου>|grep <συμβολοσειρά ή έκφραση>

<εντολή>|grep <συμβολοσειρά ή έκφραση>

grep <συμβολοσειρά ή έκφραση> [όνομα αρχείου]

Επιλογές με τη grep

1. Βασική αναζήτηση εντός αρχείου

Για παράδειγμα ας πάρουμε το αρχείο «/etc/passwd» για να ψάξουμε ένα συγκεκριμένο string (συμβολοσειρά). Για να αναζητήσουμε τη λέξη εντός του αρχείου δίνουμε

cat /etc/passwd | grep system

για να πάρουμε στην έξοδο


2. Μέτρημα λέξεων

Χρησιμοποιώντας το αρχείο του προηγούμενου παραδείγματος θα δούμε σε πόσα occurences (περιστατικά/συμβάντα) εμφανίζεται η λέξη που αναζητήσαμε

$ cat /etc/passwd | grep -c system
5

Το αποτέλεσμα μας έδωσε το πλήθος των συμβάντων που εμφανίστηκε η λέξη «system» και όχι τον αριθμό των λέξεων αυτών καθεαυτών.

Το αποτέλεσμα μας αναφέρει ότι η λέξη system εμφανίστηκε σε 5 συμβάντα.

3. Αγνοείστε τις case sensitive λέξεις

Το grep όπως γενικότερα οτιδήποτε στο linux είναι case sensitive, που σημαίνει ότι θα δώσει μόνο τη λέξη που θα ζητηθεί στο output όπως ακριβώς ζητηθεί. Για να δούμε αυτή την λειτουργία της λίγο καλύτερα ας δημιουργήσουμε το αρχείο test.txt

$ cat test.txt
CeRebrux
cerebrux
CEREBRUX
Cerebrux

Παρατηρούμε ότι αν προσπαθήσουμε να αναζητήσουμε τη λέξη cerebrux δε θα βρει όλες τις λέξεις που περιέχει το αρχείο

$ grep cerebrux test.txt
cerebrux

Το αποτέλεσμα επιβεβαιώνει ότι μόνο 1 συμβάν υπάρχει με τη μορφή που αναζητήσαμε. Δηλαδή μόνο με μικρούς χαρακτήρες. Αν όμως δε θέλουμε μια τόσο αυστηρή συνθήκη στην αναζήτηση μας, προσθέτουμε την παράμετρο «-i» όπως φαίνεται παρακάτω.

$ grep -i cerebrux test.txt
CeRebrux
cerebrux
CEREBRUX
Cerebrux

4. Δύο διαφορετικές συμβολοσειρές μέσα στο grep

Αν θέλουμε να ψάξουμε δύο λέξεις ή συμβολοσειρές τότε πρέπει αντί του grep να χρησιμοποιήσουμε το egrep. Στο παράδειγμα θα αναζητήσουμε δυο λέξεις «system» και «nobody» μέσα στο αρχείο /etc/passwd.

 egrep 'system|nobody' /etc/passwd

5. Αναδρομική αναζήτηση

Ας πούμε ότι θέλουμε να αναζητήσουμε μια λέξη ή ένα string κατά μήκος μιας τοποθεσίας, τότε χρησιμοποιούμε την παράμετρο «-r». Για παράδειγμα αν θέλουμε να ψάξουμε τη λέξη «texmaker» κατά μήκος του καταλόγου  ~/ (o home κατάλογος σας) τότε δίνουμε την εξής εντολή

grep -r "texmaker" ~/

Στην περίπτωση που τα αποτελέσματα είναι πολλά ή δεν μπορούμε να δούμ το αρχείο στο οποίο περιέχεται το όρισμα μας, τότε επιπρόσθετα δίνουμε την παράμετρο «-h»

grep -hr "texmaker" ~/

6. Grep στο output εντολής

Αυτή είναι μια από τις γνωστότερες χρήσεις της grep. Αν θέλουμε να φιλτράρουμε το output μιας εντολής, χρησιμοποιούμε τον control operator «|» με την εντολή grep να ακολουθεί με τους επιθυμητούς παραμέτρους. Ας πούμε ότι θέλουμε να ψάξουμε το output του dmesg για οτιδήποτε έχει σχέση με memory

dmesg | grep memory

7. Ανάστροφη grep

Στην περίπτωση που θέλουμε να δούμε όλες τις λέξεις σε ένα αρχείο το οποίο δεν περιέχει κάποια συγκεκριμένη λέξη (αυτή που θα ορίσουμε εμείς), τότε χρησιμοποιούμε την παράμετρο «-v». Για να το δούμε καλύτερα ας δημιουργήσουμε ένα αρχείο με τα εξής περιεχόμενα:

$ cat test.txt
CeRebrux
cerebrux
CEREBRUX
Cerebrux
Linux
LinuxUbuntu

Θέλουμε να πάρουμε ως αποτέλεσμα τις γραμμές που δεν περιέχουν τη λέξη Linux

$ grep -v Linux test.txt
CeRebrux
cerebrux
CEREBRUX
Cerebrux

8. Απόλυτη ταύτιση λέξης

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

$ grep Linux test.txt
Linux
LinuxUbuntu

όμως αν θέλουμε να ψάξουμε τη λέξη Linux ακριβώς χωρίς τις παραλλαγές που τη συναντάμε μέσα στο αρχείο, τότε θα χρησιμοποιήσουμε την παράμετρο «-w» :

$ grep -w Linux test.txt
Linux

 

Επίλογος

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

Πηγή: UxTechno