Υπάρχει ένα κλασικό κομμάτι της σοφίας του υπολογιστή που δηλώνει: "Εάν έχετε κάποιο πρόβλημα και αποφασίζετε να το λύσετε με κανονικές εκφράσεις, τώρα έχετε δύο προβλήματα." Αυτό βέβαια πηγάζει από την αντίληψη ότι οι κανονικές εκφράσεις είναι περίπλοκες μείγμα μαγικών χαρακτήρων και Voodoo. Οι τακτικές εκφράσεις μπορούν να σας επιτρέψουν να επιτύχετε γρήγορα και εύκολα την κομψή και συνοπτική λογική του προγράμματος, αλλά μόλις μάθετε να καταλαβαίνετε πώς λειτουργούν και γιατί. Σχεδόν οποιοδήποτε σύστημα Linux ή Mac έρχεται με ένα ισχυρό εργαλείο regex call grep και η μάθηση grep είναι ένα βασικό καθήκον για οποιονδήποτε χρήστη ισχύος ή διαχειριστή συστήματος. Σήμερα, θα διερευνήσουμε μερικά από αυτά που μπορείτε να κάνετε με το grep και πώς μπορεί να είναι ένα από τα πιο ισχυρά εργαλεία στο οπλοστάσιό σας.

Πως δουλεύει

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

Debian - Σταθερή διανομή διακομιστών
Ubuntu - Desktop distro που αρχικά βασίστηκε στο Debian
Kubuntu - Χρησιμοποιεί την επιφάνεια εργασίας του KDE αντί για το Gnome
Fedora - Συνέχιση του δωρεάν desktop συστήματος Red Hat
Gentoo - Ένα γρήγορο, βασισμένο σε πηγή σύστημα Linux για επαγγελματίες χρήστες
SuSE - Εμπορικό Linux που ανήκει στην Novell
Νομισματοκοπείο - Διανομής που προέρχεται από το Ubuntu με πρόσθετο περιορισμένο λογισμικό

Το Grep μπορεί να χρησιμοποιηθεί για να διαβάσει το κείμενο και να το φιλτράρει για να εμφανίσει μόνο τα μέρη που θέλετε. Εάν θέλετε να δείτε μόνο τις γραμμές που περιέχουν τη λέξη "Ubuntu", θα πρέπει να εκτελέσετε την ακόλουθη εντολή:

 grep Ubuntu distros.txt 

(Η έκδοση του grep μπορεί να περιλαμβάνει ή να μην περιλαμβάνει έντονα χρώματα όπως στο παραπάνω παράδειγμα)

Ευαίσθητη περίπτωση

Μπορεί να έχετε παρατηρήσει ότι η τελευταία μας αναζήτηση δεν επέστρεψε το Kubuntu. Εκτός αν δηλώνεται διαφορετικά, ο grep θα υποθέσει ότι εισάγατε την έκφρασή σας ακριβώς όπως τον ήθελε, και αυτό ισχύει για τα πεζά και τα πεζά. Εάν κάνετε αναζήτηση για το "ubuntu" αλλά το αρχείο κειμένου σας περιέχει "Ubuntu", η αναζήτηση σας δεν θα βρει τίποτα. Για να κάνετε την αναζήτηση χωρίς διάκριση, χρησιμοποιήστε το διακόπτη -i, όπως στο

 grep -i ubuntu distros.txt 

Ολος ο κοσμος

Με την προηγούμενη αναζήτηση, συμπεριλάβατε όλες τις παραλλαγές κεφαλαιοποίησης της λέξης "Ubuntu". Περιέλαβε το Kubuntu επειδή περιέχει τη λέξη που αναζητήσατε. Μπορεί να θέλετε να συμπεριλάβετε μόνο την τυπική έκδοση, όχι Kubuntu ή Edubuntu κ.λπ. Εάν συμβαίνει αυτό, μπορείτε να πείτε στο grep να ταιριάζει με ολόκληρη τη λέξη μόνο περνώντας την επιλογή -w .

 grep -i ubuntu distros.txt 

Αποκλεισμός

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

Χαρακτηριστικά

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

Περιοχές

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

 Θέμα 1 - μήλα Θέση 2 - μπανάνες Θέση 3 - καρύδες Θέση 4 - ροδάκινα Θέση 5 - Σταφύλια Θέση 6 - Βερίκοκο 

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

 grep "Στοιχείο [2-4]" items.txt 

Το Grep είναι ένα εξαιρετικά ισχυρό εργαλείο και η εκμάθηση του μπορεί να αποδώσει με κάθε τρόπο. Η κατανόηση του grep καθιστά επίσης πολύ πιο εύκολο να προχωρήσουμε σε άλλα ισχυρά εργαλεία κονσόλας όπως sed και awk. Μεταξύ αυτών των τριών εργαλείων, ένα εκπληκτικό ποσό της κονσόλας και της μαγείας του σεναρίου μπορεί να γίνει με πολύ λιγότερη προσπάθεια από ό, τι φαίνεται εφικτό. Εάν είστε fan of grep ή θέλετε να δείτε άλλα εργαλεία όπως sed και awk που καλύπτονται εδώ, παρακαλούμε να αφήσετε ένα σημείωμα στα σχόλια.