Κανονικές εκφράσεις ή παραστάσεις (Regular Expressions)

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Γραφήματα & Επίπεδα Γραφήματα
Advertisements

UNIX.
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ
Βασικές Έννοιες Προγραμματισμού
ΚΕΙΜΕΝΟ  Ο πρώτος τρόπος απεικόνισης πληροφορίας (και βασικός ως σήμερα).  Αδυναμία πρώτων υπολογιστών να χειριστούν άλλη μορφή πληροφορίας.  Πρόβλημα.
ΣΤΟΙΧΕΙΑ ΨΕΥΔΟΚΩΔΙΚΑ ΒΑΣΙΚΕΣ ΔΟΜΕΣ ΒΑΣΙΚΟΙ ΑΛΓΟΡΙΘΜΟΙ ΠΙΝΑΚΩΝ
Εκκίνηση του MATLAB.
ΜΑΘ 3122 (106) Γλώσσα προγραμματισμού
Τύποι πραγματικών αριθμών
Προγραμματισμός PASCAL Πληροφορική Γ' Λυκείου μέρος γ
Γλωσσική Τεχνολογία String Handling – Regular Expressions.
Regular Expressions. Regular Expressions - γενικά  Βασική ιδέα: έχουμε ένα pattern και ένα κείμενο εισόδου. Εφαρμόζουμε το pattern στο κείμενο και μπορούμε:
Περισσότερες Ασκήσεις Συνδυαστικής
Κεφάλαιο 2ο Πεπερασμένα αυτόματα.
William Stallings Computer Organization and Architecture 7 th Edition Κεφάλαιο 16 Λειτουργία Μονάδας Ελέγχου.
Η αλληλουχία των ενεργειών δεν είναι πάντα μία και μοναδική!!!
Η ΓΛΩΣΣΑ C ΜΑΘΗΜΑ 2.
Η αλληλουχία των ενεργειών δεν είναι πάντα μία και μοναδική!!!
Microsoft Excel 4.4 Τύποι και Συναρτήσεις
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
Συνάρτηση SEARCH Σύνταξη SΕΑRCΗ(Κείμενο προς εύρεση; Μέσα στο κείμενο; Θέση έναρξης) Κείμενο προς εύρεσηΕίναι το μέρος του κειμένου που θέλουμε να βρούμε.
Μεταβλητές – εντολές εκχώρησης- δομή ακολουθίας
AWK Μία εξαιρετικά δυναμική συμβολική γλώσσα προγραμματισμού και ταυτόχρονα ένα εργαλείο διαχείρισης δεδομένων. Αναζητά, τροποποιεί αρχεία, δημιουργεί.
Ενότητα Α.4. Δομημένος Προγραμματισμός
Η αλληλουχία των ενεργειών δεν είναι πάντα μία και μοναδική!!!
Επικοινωνία Ανθρώπου Μηχανής HTML CGI JAVASCRIPT Κουμπούλης Χρήστος Α.Μ. 921 Χαλαβαζής Βασίλης Α.Μ. 988.
Slide 1/42 ΗΥ – 340 Γλώσσες και Μεταφραστές Φροντιστήριο Εισαγωγή στο Flex.
Δηλαδή οι σημαντικοί δεν ασχολούνται με μικροπράγματα.
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ 2: ΘΕΜΑΤΑ ΘΕΩΡΗΤΙΚΗΣ ΕΠΙΣΤΗΜΗΣ Η/Υ
Θεωρία Γράφων Θεμελιώσεις-Αλγόριθμοι-Εφαρμογές
Εισαγωγή στο Linux/Unix Εργαστηριακή Άσκηση 3 Η/Υ 1 ο έτος Γρ. Αμούτζιας.
ΚΕΦΑΛΑΙΟ Τι είναι αλγόριθμος
Επιστημονικός Υπολογισμός Ι Πρώτο Εργαστήριο Εισαγωγή στο matlab 15 Οκτωβρίου 2010 Γιώργος Δρακόπουλος ΤΜΗΥΠ.
ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Συγγραφείς Α.Βακάλη Η. Γιαννόπουλος Ν. Ιωαννίδης Χ.Κοίλιας Κ. Μάλαμας Ι. Μανωλόπουλος Π. Πολίτης Γ΄ τάξη.
Βασικά στοιχεία της Java
ΚΕΦΑΛΑΙΟ Το αλφάβητο της ΓΛΩΣΣΑΣ
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 2: Μεταβλητές και Τύποι Δεδομένων. Διδάσκων: Νικόλαος Θ Λιόλιος,
ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ
Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον ΑΣΚΗΣΕΙΣ – Δομή Ακολουθίας 7 – Βασικά στοιχεία Προγραμματισμού.
Βασικές έννοιες προγραμματισμού Κεφάλαιο 7 ο. Βασικές έννοιες προγραμματισμού Αλφάβητο και τύποι δεδομένων Σταθερές και μεταβλητές Τελεστές, συναρτήσεις.
 Στόχος της παρουσίασης αυτής είναι η εξοικείωση με τον Ηλεκτρονικό Κατάλογο της Βιβλιοθήκης προκειμένου να αναζητήσουμε ένα τεκμήριο από τη συλλογή.
ΜΕΤΑΒΛΗΤΕΣ-ΣΤΑΘΕΡΕΣ -ΕΚΦΡΑΣΕΙΣ
Θεωρήστε το λογικό χώρο διευθύνσεων που αποτελείται από 8 σελίδες των 1024 λέξεων (word) η καθεμία, που απεικονίζεται σε φυσική μνήμη 32 πλαισίων. Πόσα.
ΚΕΦΑΛΑΙΟ 2ο - ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΑΛΓΟΡΙΘΜΩΝ
Αρχεσ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ ΤΑξη Β΄
Δυναμικός Κατακερματισμός
Δεδομένα, μεταβλητές, υπολογισμοί
ΑΛΓΟΡΙΘΜΟΣ ΠΡΟΒΛΗΜΑ ΑΛΓΟΡΙΘΜΟΣ ΛΥΣΗ
Κλάσεις και αντικείμενα
Αρχεσ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ ΤΑξη Β΄
Prolog Επεξεργασία και Αναπαράσταση Γνώσης
Κεφάλαιο 7: Διαδικτύωση-Internet
Τύποι Μεταβλητών Τελεστές Βασική Είσοδος/Έξοδος
Μανασσάκης Βασίλης Καθηγητής Πληροφορικής
ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ
Τελεστές και ή όχι Για την εκτέλεση αριθμητικών πράξεων
Εισαγωγή στην Πληροφορική μεγάλου όγκου δεδομένων
Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον
Κεφάλαιο 10 Streams.
ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΑΛΓΟΡΙΘΜΩΝ
Εντολές και δομές αλγορίθμου
Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον ΑΕΠΠ
Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον ΑΕΠΠ
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΩΝ Η/Υ
ΑΝΑΠΑΡΑΣΤΑΣΗ ΧΑΡΑΚΤΗΡΩΝ
Εντολές επεξεργασίας κειμένου (text) : sed (stream ή script editor), cut, paste, tr, sort, uniq Εντολές αναζήτησης : file, find 6ο ΕΡΓΑΣΤΗΡΙΟ ΛΕΙΤΟΥΡΓΙΚΑ.
ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ
Αναζήτηση στο Διαδίκτυο
Κυριάκου Νικόλαος Πληροφορικής ΠΕ-20
Δυναμικός Κατακερματισμός
Μεταγράφημα παρουσίασης:

Κανονικές εκφράσεις ή παραστάσεις (Regular Expressions) 3ο Εργαστήριο ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Μια κανονική έκφραση είναι ένας σύντομος και σαφής τρόπος έκφρασης οποιουδήποτε συνδυασμού χαρακτήρων. Οι κανονικές εκφράσεις (RE) αποτελούνται από συνδυασμό κανονικών χαρακτήρων με έναν ή περισσότερους μεταχαρακτήρες. Οι μεταχαρακτήρες είναι χαρακτήρες με ειδική σημασία που καθορίζεται από το φλοιό που τους χρησιμοποιεί (π.χ. Bourne, Korn, ή C-shell). ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Να προσδιορίσουν ονόματα αρχείων Να ανιχνεύσουν περιεχόμενα αρχείων Οι κανονικές εκφράσεις μπορούν να χρησιμοποιηθούν σε εντολές και προγράμματα του UNIX για: Να προσδιορίσουν ονόματα αρχείων Να ανιχνεύσουν περιεχόμενα αρχείων Να μεταβάλλουν περιεχόμενα αρχείων Κάθε εντολή του UNIX διαφέρει όσον αφορά τον τύπο των RE που υποστηρίζει. Ο προσδιορισμός των RE που υποστηρίζονται από κάθε εντολή είναι προτιμότερο να γίνεται ελέγχοντας την εντολή μέσω της εντολής man (manual pages) ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Παραδείγματα Οι κανονικές εκφράσεις χρησιμοποιούνται κυρίως για την αναζήτηση αλφαριθμητικών γενικής μορφής σε ένα αρχείο. Π.χ. Για την εύρεση όλων των γραμμών ενός αρχείου που περιέχουν ένα από τα παρακάτω: Τη λέξη Unix, Τη λέξη UNIX, Ένα πρότυπο (pattern) που αποτελείται από 4 ψηφία Έναν ταχυδρομικό κωδικό, Ένα όνομα, Όλα τα φωνήεντα σε αλφαβητική σειρά. ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Κανονικές εκφράσεις Προτάθηκαν για πρώτη φορά το 1956 (S. Kleene) Ο Ken Thomson (1968) τις χρησιμοποίησε στην εντολή grep (global regular expression print) Μια κανονική έκφραση είναι ένα πρότυπο αποτελούμενο από μια ακολουθία χαρακτήρων που αντιστοιχούνται με το προς εξέταση κείμενο. Το UNIX εξετάζει το κείμενο ως προς το πρότυπο για να αποφασίσει αν το πρότυπο (pattern) και το κείμενο (text) ταιριάζουν (αντιστοιχούνται). Αν υπάρχει αντιστοιχία η έκφραση είναι αληθής και η εντολή που χρησιμοποιεί το πρότυπο εκτελείται. Μερικές από τις πλέον ισχυρές εντολές (λειτουργίες) του UNIX, όπως grep και sed, χρησιμοποιούν κανονικές εκφράσεις. ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Κανονικές εκφράσεις Μια κανονική έκφραση είναι μια σειρά από κανονικούς χαρακτήρες και ειδικούς τελεστές. Οι κανονικοί χαρακτήρες περιλαμβάνουν το σύνολο των πεζών και κεφαλαίων γραμμάτων, τα ψηφία, και άλλους συχνά χρησιμοποιούμενους χαρακτήρες : ~, ', !, @, #, _, -, =, :, ;, ,,/ Οι ειδικοί τελεστές είναι \, ., *, [, ^, $, ]. ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Κανονική έκφραση Μια κανονική έκφραση είναι παρόμοια με μια μαθηματική έκφραση. Μια μαθηματική έκφραση αποτελείται από τελεστέους (operands) και τελεστές (operators). Μια κανονική έκφραση αποτελείται από atoms και operators. Το atom προσδιορίζει αυτό που αναζητούμε και το σημείο του κειμένου όπου υπάρχει αντιστοιχία. Ένας operator συνδυάζει atoms σε σύνθετες εκφράσεις. ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Atoms ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Παράδειγμα προτύπου ενός χαρακτήρα Το απλούστερο atom είναι ένας χαρακτήρας. ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Παράδειγμα Dot Atom Μια τελεία (dot) αντιστοιχεί με οποιοδήποτε απλό χαρακτήρα εκτός από τον new line character (\n). ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Παράδειγμα Class Atom Μια class atom ορίζει ένα σύνολο ASCII χαρακτήρων, καθένας από τους οποίους μπορεί να αντιστοιχεί με οποιουσδήποτε χαρακτήρες του κειμένου. Το σύνολο χαρακτήρων που χρησιμοποιείται στη διαδικασία αντιστοίχισης (matching process) περικλείεται σε αγκύλες. Μια περιοχή (range) χαρακτήρων κειμένου ορίζεται με μια παύλα (-) π.χ. [a-d] Το ^ είναι ένας χαρακτήρας εξαίρεσης π.χ. κάθε χαρακτήρας εκτός από φωνήεν, χρησιμοποιείται ην έκφραση [^aeiou]. ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Παραδείγματα κλάσεων Ο escape character (\) χρησιμοποιείται όταν ο αντιστοιχούμενος χαρακτήρας είναι ένας από τους – και ^ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Anchors Anchors : είναι atoms που χρησιμοποιούνται για να αντιστοιχήσουν το πρότυπο σε ένα συγκεκριμένο τμήμα Τα Anchors δεν αντιστοιχούνται στο κείμενο αλλά καθορίζουν το σημείο όπου πρέπει να βρεθεί ο επόμενος χαρακτήρας στο πρότυπο. ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Operators Μπορούμε να συνδυάσουμε atoms με operators. ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Παραδείγματα Sequence Operator Αυτό σημαίνει ότι αν μια σειρά από atoms φαίνονται σε μια κανονική έκφραση, υποδηλώνεται η παρουσία ενός αόρατου sequence operator ανάμεσά τους. ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Παράδειγμα χρήσης Sequence Operator ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Τελεστής εναλλαγής (Alternation Operator ) ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Αντιστοίχιση Alternation Operators ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Τελεστής επανάληψης (Repetition Operator) Ο τελεστής επανάληψης (repetition operator) καθορίζει ότι το atom ή η έκφραση που υπάρχει ακριβώς πριν από την επανάληψη μπορεί να επαναληφθεί. m είναι ο ελάχιστος αριθμός επαναλήψεων. n είναι ο μέγιστος αριθμός επαναλήψεων. ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Βασικές φόρμες επανάληψης ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Παραδείγματα με τελεστές επανάληψης ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Επαναλαμβανόμενη αντιστοίχιση προτύπων ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Τελεστής ομαδοποίησης (Group Operator) Όταν μια ομάδα χαρακτήρων περικλείεται σε παρενθέσεις ο επόμενος τελεστής εφαρμόζεται σε όλη την ομάδα. ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Η οικογένεια grep Οι εντολές grep, egrep, fgrep χρησιμοποιούνται για την αντιστοίχιση ενός προτύπου χαρακτήρων Για την ομαλή λειτουργία οι κανονικές εκφράσεις πρέπει να περικλείονται σε οριοθέτες (π.χ. ‘ ‘) ώστε ο φλοιός να διερμηνεύσει τους χαρακτήρες που περιέχονται στην κανονική έκφραση ως “grep special characters” και όχι ως “shell special characters” ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Η εντολή grep (general regular expression print) επιλογή σημασία -c Εμφανίζει το πλήθος των γραμμών που ταιριάζουν με το πρότυπο -i Αγνοεί τη διάκριση μεταξύ πεζών και κεφαλαίων γραμμάτων -l Εμφανίζει τα ονόματα των αρχείων που ταιριάζουν με το πρότυπο -n Περιλαμβάνει τους αριθμούς γραμμών -v Εμφανίζει τις γραμμές που δεν αντιστοιχούν στο πρότυπο ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Μορφές κανονικών εκφράσεων : Απλό κείμενο grep unix file (αντιστοιχεί όλες τις εμφανίσεις της λέξης unix από το αρχείο file) Κείμενο που περιέχει ειδικούς χαρακτήρες grep ‘[uU]nix’ file (αντιστοιχεί unix και Unix) ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Παραδείγματα $ grep “^studin” /etc/passwd $ grep studin /etc/passwd Αναζητούνται και εμφανίζονται όλες οι γραμμές του αρχείου passwd που περιέχουν το πρότυπο studin. $ grep “^studin” /etc/passwd Αναζητούνται και εμφανίζονται όλες οι γραμμές του αρχείου passwd που ξεκινούν με το πρότυπο studin ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Άσκηση Να προσδιοριστεί ένα πρότυπο που θα εμφανίζει όλες τις γραμμές του αρχείου passwd που ξεκινούν με τη λέξη studin και στη συνέχεια δεν θα ακολουθεί πεζός χαρακτήρας. $ grep “^studin[^a-z]” /etc/passwd $ grep ‘^studin[a-z]’ /etc/passwd Εμφανίζει τις γραμμές που εξαιρέθηκαν από το προηγούμενο πρότυπο ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Wildcards & Κανονικές Εκφράσεις Οι κανονικές εκφράσεις ή παραστάσεις (regular expressions - RE) είναι διαφορετικά και πιο ισχυρά εργαλεία ταιριάσματος προτύπων (pattern-matching). Οι RE διερμηνεύονται και χρησιμοποιούνται από ειδικές λειτουργίες (π.χ. grep, sed). Οι χαρακτήρες – μπαλαντέρ στα ονόματα αρχείων διερμηνεύονται από τον φλοιό και έχουν μεγαλύτερη προτεραιότητα, ενώ οι κανονικές εκφράσεις από τις εντολές που τις χρησιμοποιούν. ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Κανόνες δημιουργίας & αντιστοίχισης κανονικών εκφράσεων Οι χαρακτήρες : . ,*, [ ,\ είναι ειδικοί χαρακτήρες εκτός όταν εμφανίζονται ανάμεσα σε [ ] Ο χαρακτήρας ^ είναι ειδικός χαρακτήρας όταν είναι ο πρώτος που εμφανίζεται σε μια κανονική έκφραση και όταν είναι ο πρώτος χαρακτήρας μέσα σε [ ] Ο χαρακτήρας $ είναι ειδικός χαρακτήρας όταν είναι τελευταίος Ένας ειδικός χαρακτήρας που έχει μπροστά \ είναι ο ίδιος ο χαρακτήρας (escape chars) ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Πίνακας συμβολισμού κανονικών εκφράσεων Συμβολισμός Σημασία c Αντιστοιχεί στον χαρακτήρα c \c Αναγκάζει το c να διαβαστεί μόνον ως το γράμμα c ^ Ταυτοποιείται κατά την αναζήτηση με την αρχή της γραμμής $ Ταυτοποιείται κατά την αναζήτηση με το τέλος της γραμμής . Ταυτοποιείται με ένα και μόνο χαρακτήρα [xy] Κάθε μεμονωμένος χαρακτήρας που περιέχεται στο σύνολο [^xy] Κάθε μεμονωμένος χαρακτήρας που δεν περιέχεται στο σύνολο (exclusion set) ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

c* * + ? Συμβολισμός Σημασία 0 ή περισσότερες εμφανίσεις της έκφρασης που προηγείται + 1 ή περισσότερες εμφανίσεις της έκφρασης που προηγείται ? 0 ή 1 εμφανίσεις της έκφρασης που προηγείται ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Παραδείγματα Όλες οι γραμμές που δεν ξεκινούν από κεφαλαίο αγγλικό χαρακτήρα : grep ‘^[^A-Z]' file Όλες οι γραμμές που περιέχουν !,& ,* : grep '([\!\*\&])‘ file Όλες οι γραμμές που περιέχουν την τιμή $1.99 : grep '\$1\.99‘ file Όλες οι γραμμές με μήκος 2 χαρακτήρες : grep '^..$‘file ή ^.\{2\}$ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Όλες οι γραμμές που έχουν μήκος ακριβώς 17 χαρακτήρες: grep '^.\{17\}$‘ file Όλες οι γραμμές που έχουν μήκος τουλάχιστον 25 χαρακτήρες: grep '^.\{25,\}$' Όλες οι γραμμές που δεν έχουν μήκος 3 χαρακτήρες: grep −v '^...$‘file ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Όλες οι γραμμές που ξεκινούν με * : ^\* Όλες οι γραμμές που δεν περιέχουν αριθμούς : ^[^0−9]*$ Όλες οι γραμμές που περιέχουν τα έτη 1991 έως 1995 : 199[1-5] Οποιαδήποτε ακολουθία χαρακτήρων δεν περιέχει ψηφία: [A-Za-z][A-Za-z]* ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Οποιοσδήποτε προσημασμένος ακέραιος : [+\-][0-9][0-9]* Οποιαδήποτε ακολουθία χαρακτήρων : .* (ιδιωματισμός!) Οποιοδήποτε αναγνωριστικό (identifier) : [a-zA-Z_][a-zA-Z_0-9]* Οποιοσδήποτε πραγματικός αριθμός χωρίς πρόσημο: [0-9]+[.][0-9]+ [0-9]*[.][0-9]* ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Οποιοδήποτε πλήθος από * ακολουθούμενο από οποιοδήποτε πλήθος \ : ‘\**\\*’ Ώρα σε 12ωρη βάση: ‘1*[012]*[1-9]*:[0-5][0-9]’ $ grep ‘:$’ /etc/passwd (οι γραμμές στις οποίες δεν περιέχεται login shell) $ grep ‘$100*’ * (αναζητεί όλα τα αρχεία στα οποία υπάρχει το ποσό $100) ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

$ grep ‘z*’ /etc/passwd (οι γραμμές με 0 ή περισσότερα z) $ grep ‘zz*’ /etc/passwd (οι γραμμές με 1 ή περισσότερα z) ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Να εξηγήσετε την εντολή : ls -l | grep '^d........x' Εμφανίζει όλα τα directories του current directory στα οποία οι υπόλοιποι χρήστες (other) έχουν δικαίωμα eXecute ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Υποθέτουμε ότι στο αρχείο passwd οι ημερομηνίες είναι στη μορφή : Feb 9, 1999 . Ποια είναι η μορφή της κανονικής έκφρασης; ‘[A-Z][a-z]* [0-9]\{1,2\}, [0-9]\{4\}’ ‘[A-Z][a-z]\{3,\} [0-9]\{1,\}, [0-9]\{4\}’ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Ποια είναι η μορφή της κανονικής έκφρασης για τηλεφωνικούς αριθμούς της περιοχής Θεσσαλονίκης; (πρόθεμα : 2310, 2391,2392, …, 2396 και αριθμός εξαψήφιος στη μορφή : 23ΧΧ-ΧΧΧ-ΧΧΧ) ‘23[19][0-6]-[0-9]\{3\}-[0-9]\{3\}’ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Επεκτεταμένες RE : Η εντολή egrep Είναι υπερσύνολο της grep. Αναζητεί και αντιστοιχεί όλες τις περιπτώσεις κανονικών εκφράσεων της grep και επιπλέον : Μια RE που ακολουθείται από το + αντιστοιχεί μία ή περισσότερες ταυτίσεις της RE Μια RE που ακολουθείται από το ? αντιστοιχεί καμία ή μία ταυτίσεις της RE Πολλαπλές RE διαχωριζόμενες με | αντιστοιχούνται με οποιαδήποτε από τις RE που περιέχονται. Μια RE μπορεί να περικλείεται σε παρενθέσεις για ομαδοποίηση ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

$egrep ‘[A-Z][A-Z]+’ file $egrep ‘239(4|6)-(0|1) phones Παραδείγματα : $egrep ’19|23’ file $egrep ‘[A-Z][A-Z]+’ file $egrep ‘239(4|6)-(0|1) phones $egrep ‘(Sally|Fred) (Smith|Jones|Parker) phones.list ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Παραδείγματα με την egrep # όλες οι γραμμές που ξεκινούν με # egrep '(^#)' /etc/rc # όλες οι γραμμές που ΔΕΝ ξεκινούν με # egrep '(^[^#])' /etc/rc # όλες οι γραμμές που ξεκινούν με e, f ή g. egrep '(^[efg])' /etc/rc # όλες οι γραμμές που ξεκινούν με κεφαλαίο γράμμα egrep '(^[A-Z])' /etc/rc ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

# όλες οι γραμμές που ΔΕΝ ξεκινούν με κεφαλαίο γράμμα $egrep '(^[^A-Z])' /etc/rc # όλες οι γραμμές που περιέχουν ! * & $egrep '([\!\*\&])' /etc/rc # όλες οι γραμμές που περιέχουν ! * & αλλά δεν ξεκινούν με # $egrep '([^#][\!\*\&])' /etc/rc ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Η εντολή fgrep (file-based grep) Χρησιμοποιείται για την ταυτόχρονη αναζήτηση πολλαπλών προτύπων και δεν χρησιμοποιεί μετα-χαρακτήρες. ένα αρχείο προτύπων περιλαμβάνει οποιοδήποτε πρότυπο θα αντιλαμβάνεται η grep και προσδιορίζεται από την επιλογή –f. $fgrep –f pattern_file file Το pattern_file περιέχει τα πρότυπα ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Αποθήκευση (save) Ο τελεστής αποθήκευσης \( \) αντιγράφει το αλφαριθμητικό που περικλείεται σε μια προσωρινή μνήμη (buffer ή register) για μεταγενέστερη χρήση. Υπάρχουν συνολικά εννέα (9) buffers που αριθμούνται από \1 έως \9 \1 : είναι το τμήμα κειμένου που αντιστοιχεί στην πρώτη κανονική έκφραση σε παρένθεση \2 : είναι το τμήμα κειμένου που αντιστοιχεί στην δεύτερη κανονική έκφραση σε παρένθεση ….. ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

'^\([a-z]\)\1' '\([a-z][a-z]*\)\1\1' παραδείγματα Αναζητεί και εμφανίζει τις γραμμές που ξεκινούν από ένα ζεύγος όμοιων γραμμάτων. '\([a-z][a-z]*\)\1\1' Αναζητεί και εμφανίζει τις γραμμές που περιέχουν τουλάχιστον τρία αντίγραφα ενός συνόλου χαρακτήρων που αποτελείται από πεζά γράμματα. ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

Η παρακάτω ακολουθία αντιστοιχεί στο πρότυπο: Bill\(.\)Gates\1 αναζητεί ένα πρότυπο αλφαριθμητικού που ξεκινά με τη λέξη Bill, ακολουθούμενη από ένα χαρακτήρα (πλην του χαρακτήρα αλλαγής γραμμής), ακολουθούμενο από τη λέξη Gates, ακολουθούμενη από τον ίδιο ένα χαρακτήρα. Η παρακάτω ακολουθία αντιστοιχεί στο πρότυπο: Bill!Gates! Bill-Gates- αλλά όχι η ακολουθία: Bill?Gates! Bill-Gates ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03

“a\(.\)b\(.\)c\2d\1” Το παράδειγμα αφορά ένα πρότυπο που ξεκινά με a, ένα χαρακτήρα (#1), ακολουθούμενο από το b, ακολουθούμενο από έναν άλλο χαρακτήρα (#2), c, το χαρακτήρα #2, d, και το χαρακτήρα #1. Η παρακάτω ακολουθία αντιστοιχεί στο πρότυπο: a-b!c!d- ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03