Το 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
Να προσθέσω και εγώ κάτι που μου χρησιμεύει συχνά (ειδικά όταν ψάχνω σε αρχεία κώδικα). Εάν θέλουμε να δούμε και τον αριθμό της γραμμής που έκανε match τότε απλά προσθέτουμε την παράμετρο -r
Οπότε το:
grep -r «texmaker» ~/
εάν γίνει
grep -rn «texmaker» ~/
μαζί με το όνομα του αρχείου θα μας δείξει και τον αριθμό της γραμμής στην οποία βρέθηκε το string μας.
Ωραίος !!! Ευχαριστούμε !