Linux Regular Expression Tutorial: Grep Regex Example

⚡ Έξυπνη Σύνοψη

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

  • 🔎 Τί είναι: Οι κανονικές εκφράσεις, που συντομεύονται σε regexp ή regex, περιγράφουν μοτίβα κειμένου για αναζήτηση και αντιστοίχιση.
  • 🧩 Βασικό σετ: Σύμβολα όπως . ^ $ * και \ χαρακτήρες anchor, repeat και escape σε ένα μοτίβο.
  • 🔢 Διάστημα: Οι αγκύλες όπως {n} και {n,m} ελέγχουν πόσες φορές επαναλαμβάνεται ο προηγούμενος χαρακτήρας.
  • Επεκτάθηκε: Με grep -E, \+ και \? αντιστοιχίζονται μία ή περισσότερες και μηδενική ή μία εμφάνιση ενός χαρακτήρα.
  • 🧵 Επέκταση κηδεμόνα: Οι αγκύλες δημιουργούν πολλαπλές συμβολοσειρές από μια ακολουθία ή μια λίστα διαχωρισμένη με κόμμα.
  • Πού χρησιμοποιείται: Εργαλεία όπως τα grep, sed, tr και vi βασίζονται σε κανονικές εκφράσεις για το φιλτράρισμα κειμένου.
  • 🤖 Βοήθεια με την Τεχνητή Νοημοσύνη: Οι βοηθοί τεχνητής νοημοσύνης και ο συνεργάτης του GitHub μπορούν να δημιουργήσουν, να εξηγήσουν και να εντοπίσουν σφάλματα σε μοτίβα regex γρήγορα.

Κανονικές εκφράσεις Linux με grep — βασικά παραδείγματα regex, παραδείγματα interval και εκτεταμένα παραδείγματα regex

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

Τι είναι οι κανονικές εκφράσεις Linux;

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

Τύποι κανονικών εκφράσεων

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

Βασικές κανονικές εκφράσεις

Μερικές από τις συνήθως χρησιμοποιούμενες εντολές που λειτουργούν με κανονικές εκφράσεις είναι οι tr, sed, viκαι grep. Ο παρακάτω πίνακας παραθέτει μερικές από τις βασικές κανονικές εκφράσεις.

Σύμβολο Περιγραφή
. Αντικαθιστά οποιονδήποτε χαρακτήρα
^ Ταιριάζει με την αρχή μιας συμβολοσειράς
$ Ταιριάζει με το τέλος μιας συμβολοσειράς
* Αντιστοιχεί μηδέν ή περισσότερες φορές με τον προηγούμενο χαρακτήρα
\ Αντιπροσωπεύει ειδικούς χαρακτήρες
() Ομαδοποιεί κανονικές εκφράσεις
? Ταιριάζει ακριβώς με έναν χαρακτήρα

Ας δούμε ένα παράδειγμα. Αρχικά, εκτελέστε την εντολή cat sample για να εμφανίσετε τα περιεχόμενα ενός υπάρχοντος αρχείου, όπως φαίνεται παρακάτω.

Δείγμα εντολής cat που εμφανίζει τα περιεχόμενα ενός υπάρχοντος αρχείου στο τερματικό

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

grep αναζήτηση στο αρχείο δείγματος για γραμμές που περιέχουν το γράμμα a

Το σύμβολο καρέ '^' αντιστοιχεί στην αρχή μιας συμβολοσειράς. Το παρακάτω παράδειγμα αναζητά περιεχόμενο που ξεκινά με το γράμμα 'a'.

grep με μια άγκυρα caret που ταιριάζει μόνο με γραμμές που ξεκινούν με το γράμμα a

Φιλτράρονται μόνο οι γραμμές που ξεκινούν με τον χαρακτήρα. Οι γραμμές που δεν περιέχουν τον χαρακτήρα 'a' στην αρχή αγνοούνται.

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

Δείγμα περιεχομένων αρχείου που εμφανίζονται πριν από το φιλτράρισμα γραμμών που τελειώνουν με το γράμμα t

Επιλέξτε μόνο τις γραμμές που τελειώνουν με το γράμμα 't' χρησιμοποιώντας την άγκυρα '$', όπως φαίνεται παρακάτω.

grep με μια άγκυρα δολαρίου επιλέγοντας μόνο γραμμές που τελειώνουν με το γράμμα t

Διάστημα Κανονικές εκφράσεις

Αυτές οι εκφράσεις καθορίζουν τον αριθμό των εμφανίσεων ενός χαρακτήρα σε μια συμβολοσειρά. Παρατίθενται παρακάτω.

Έκφραση Περιγραφή
{δεν} Ταιριάζει ακριβώς με τον προηγούμενο χαρακτήρα που εμφανίζεται «n» φορές
{n,m} Ταιριάζει με τον προηγούμενο χαρακτήρα που εμφανίζεται 'n' φορές αλλά όχι περισσότερο από m
{n, } Ταιριάζει με τον προηγούμενο χαρακτήρα μόνο όταν εμφανίζεται 'n' φορές ή περισσότερες

Για παράδειγμα, φιλτράρετε όλες τις γραμμές που περιέχουν τον χαρακτήρα 'p'. Το παρακάτω στιγμιότυπο οθόνης δείχνει τις αντίστοιχες γραμμές.

grep φιλτράροντας το αρχείο δείγματος για γραμμές που περιέχουν τον χαρακτήρα p

Τώρα ελέγξτε ότι ο χαρακτήρας 'p' εμφανίζεται ακριβώς δύο φορές σε μια συμβολοσειρά, τη μία μετά την άλλη. Η σύνταξη για αυτό είναι:

cat sample | grep -E p\{2}

Το αποτέλεσμα του διαλειμματικού αγώνα φαίνεται παρακάτω.

grep -E διαστήματος έκφραση που ταιριάζει με τον χαρακτήρα p που εμφανίζεται ακριβώς δύο φορές

Σημείωση: Πρέπει να προσθέσετε -E με αυτές τις κανονικές εκφράσεις.

Εκτεταμένες κανονικές εκφράσεις

Αυτές οι κανονικές εκφράσεις συνδυάζουν περισσότερες από μία εκφράσεις. Μερικές από αυτές είναι:

Έκφραση Περιγραφή
\+ Ταιριάζει με μία ή περισσότερες εμφανίσεις του προηγούμενου χαρακτήρα
\? Ταιριάζει με μηδέν ή μία εμφάνιση του προηγούμενου χαρακτήρα

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

grep αναζήτηση στο αρχείο δείγματος για όλες τις γραμμές που περιέχουν τον χαρακτήρα t

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

cat sample|grep "a\+t"

Η έξοδος εμφανίζεται στο ακόλουθο στιγμιότυπο οθόνης.

grep εκτεταμένη έκφραση που ταιριάζει με έναν ή περισσότερους χαρακτήρες a ακολουθούμενους από t

Επέκταση του νάρθηκα

Η σύνταξη για την επέκταση των αγκυλών είναι είτε μια ακολουθία είτε μια λίστα στοιχείων που χωρίζονται με κόμμα και βρίσκονται μέσα σε αγκύλες '{}'. Τα στοιχεία έναρξης και λήξης σε μια ακολουθία διαχωρίζονται με δύο τελείες '..'.

Μερικά παραδείγματα παρουσιάζονται παρακάτω.

Εντολή echo χρησιμοποιώντας επέκταση αγκυλών για τη δημιουργία πολλαπλών συμβολοσειρών από μια ακολουθία και μια λίστα

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

Συχνές Ερωτήσεις

Το grep χρησιμοποιεί βασικές κανονικές εκφράσεις από προεπιλογή. Το egrep ενεργοποιεί εκτεταμένες εκφράσεις (το ίδιο με το grep -E) και το fgrep ταιριάζει με σταθερές συμβολοσειρές χωρίς regex (grep -F). Το σύγχρονο GNU grep χαρακτηρίζει το egrep και το fgrep ως παρωχημένα, επομένως προτιμήστε το grep -E και το grep -F.

Οι κλάσεις χαρακτήρων αντιστοιχούν σε μια κατηγορία χαρακτήρων. Οι εκφράσεις σε αγκύλες όπως [az] αντιστοιχούν σε ένα εύρος, ενώ οι κλάσεις POSIX όπως [[:alpha:]], [[:digit:]] και [[:space:]] αντιστοιχούν σε γράμματα, αριθμούς και κενά διαστήματα. Διατηρούν τα μοτίβα αναγνώσιμα και φορητά σε διαφορετικές τοπικές ρυθμίσεις.

Προσθέστε την επιλογή -i, για παράδειγμα grep -i δείγμα “hello”. Αυτό ταιριάζει με τα Hello, HELLO και hello. Χωρίς το -i, οι κανονικές εκφράσεις κάνουν διάκριση πεζών-κεφαλαίων, επομένως ένα κεφαλαίο γράμμα και η πεζή μορφή του αντιμετωπίζονται ως δύο διαφορετικοί χαρακτήρες.

Οι χαρακτήρες μπαλαντέρ του κελύφους (globbing) επεκτείνουν τα ονόματα αρχείων, όπου * σημαίνει οποιουσδήποτε χαρακτήρες και ? σημαίνει έναν χαρακτήρα. Οι κανονικές εκφράσεις αντιστοιχούν σε κείμενο μέσα σε αρχεία, όπου * σημαίνει μηδέν ή περισσότερους από τους προηγούμενους χαρακτήρες. Τα ίδια σύμβολα σημαίνουν διαφορετικά πράγματα σε κάθε περιβάλλον.

Χρησιμοποιήστε την επιλογή -o, για παράδειγμα grep -o “a\+t” δείγμα. Αντί να εκτυπώσει ολόκληρη τη γραμμή, η grep εκτυπώνει μόνο το μέρος που ταιριάζει με το μοτίβο, μία αντιστοίχιση ανά γραμμή. Είναι χρήσιμη για π.χ.tracτιμές όπως email ή αριθμοί.

Χρησιμοποιήστε εναλλαγή με το σύμβολο pipe. Σε εκτεταμένη λειτουργία, το δείγμα grep -E “cat|dog” ταιριάζει με γραμμές που περιέχουν cat ή dog. Στη βασική λειτουργία πρέπει να κάνετε διαφυγή ως δείγμα grep “cat\|dog”. Η εναλλαγή επιτρέπει σε μία εντολή να αναζητά πολλά μοτίβα ταυτόχρονα.

Οι βοηθοί τεχνητής νοημοσύνης μπορούν να μετατρέψουν μια απλή αγγλική περιγραφή σε ένα λειτουργικό regex, να εξηγήσουν τι κάνει ένα κρυπτικό μοτίβο και να προτείνουν διορθώσεις όταν μια αντιστοίχιση αποτύχει. Τα εργαλεία μηχανικής μάθησης ανιχνεύουν επίσης επαναλαμβανόμενα μοτίβα σε μεγάλα αρχεία καταγραφής που θα ήταν κουραστικό να γραφτούν χειροκίνητα.

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

Συνοψίστε αυτήν την ανάρτηση με: