(Regular Expressions) ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ: ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ/ ΧΕΙΜ

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

Προγραμματισμός Διαδικτύου

Εισαγωγή στα Λειτουργικά Συστήματα

Προγραμματισμός Διαχείρισης Συστημάτων Ι

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον

Λειτουργικά Συστήματα 5η εργαστηριακή άσκηση

Βασικές Έννοιες Αλγορίθμων. Βασικές Εντολές Αλγορίθμων (Κεφ. 2ο Παρ. 2.4)

Fixed Character strings

Φυσικές και τεχνητές γλώσσες. Το αλφάβητο της ΓΛΩΣΣΑΣ, Τύποι Δεδομένων. Σταθερές, Μεταβλητές, Τελεστές, Συναρτήσεις, Δομή Προγράμματος

Κεφάλαιο 7 ο Βασικές Έννοιες Προγραμματισμού (σελ )

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Πρόβλημα 29 / σελίδα 28

Γλωσσική Τεχνολογία. String Handling Regular Expressions

Unix: Εντολές, οργάνωση και χειρισµός αρχείων, διεργασίες

[11] Υπολογιστικά συστήματα: Στρώματα. Περιεχόμενα. Εισαγωγή. επικοινωνία εφαρμογές λειτουργικό σύστημα προγράμματα υλικό

2.1. Εντολές Σχόλια Τύποι Δεδομένων

Ανάπτυξη και Σχεδίαση Λογισμικού

ΕΠΛ 003: ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ. Εισαγωγή στο Unix

Σχεδίαση Βάσεων Δεδομένων

Μερικές άλλες χρήσιμες εντολές

Αλγόριθμοι Αναπαράσταση αλγορίθμων Η αναπαράσταση των αλγορίθμων μπορεί να πραγματοποιηθεί με:

Κεφάλαιο 2: Τυπικές γλώσσες. Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος / 216

Εναλλακτικές εντολές για ανάγνωση/εγγραφή

HY340, 2009 Α. Σαββίδης Slide 2 / 26. HY340, 2009 Α. Σαββίδης Slide 3 / 26. HY340, 2009 Α. Σαββίδης Slide 4 / 26

Λειτουργικά Συστήματα

Regular Expressions ΓΛΩΣΣΙΚΉ ΤΕΧΝΟΛΟΓΊΑ

Βασικές έννοιες προγραμματισμού

Ενότητα 3 1 Compiler Lecture Notes 1.0 documentation

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ

Προγραμματισμός Υπολογιστών & Εφαρμογές Python. Κ.Π. Γιαλούρης

Φροντιστήριο 1ο Εισαγωγή στο FLEX. Flex. Regular Expressions (1/4)

Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript

ΓΛΩΣΣΑ ΑΛΦΑΒΗΤΟ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΣΤΑΘΕΡΕΣ ΜΕΤΑΒΛΗΤΕΣ

Γλώσσες που περιγράφονται από Κανονικές Εκφράσεις

Αναφορά (1/2) Μπορούμε να ορίσουμε μια άλλη, ισοδύναμη αλλά ίσως πιο σύντομη, ονομασία για ποσότητα (μεταβλητή, σταθερή, συνάρτηση, κλπ.

Μεταγλωττιστές. Ενότητα 2: Τυπικές γλώσσες (Μέρος 1 ο ) Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ

ΤΕΙΘ ΣΤΕΦ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΘΗΜΑ: ΕΙΣΑΓΩΓΗ ΣΤΑ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ (UNIX) ΕΡΓΑΣΤΗΡΙΟ

ΠΕΡΙΕΧΟΜΕΝΑ. Εντολές επιλογής Εντολές επανάληψης

Προγραμματισμός Διαχείρισης Συστημάτων ΙΙ

3ο Εργαστήριο Βασικές εντολές διαχείρισης αρχείων σε LINUX

Λειτουργικά Συστήματα (Λ/Σ)

Λειτουργικό σύστημα Unix

ΜΑΘΗΜΑ: ΕΙΑΓΩΓΗ ΣΑ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ (UNIX) ΕΡΓΑΣΤΗΡΙΟ. 10o ΕΡΓΑΣΤΗΡΙΟ

Μερικές άλλες χρήσιμες εντολές

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

Προγραμματισμός Διαχείρισης Συστημάτων Ι

ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ. Στην εξοικείωση με τη διαδικασία κατασκευής ενός Λεξικού Αναλυτή κάνοντας χρήση του lex.

ΜΑΘΗΜΑ: ΕΙΑΓΩΓΗ ΣΑ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ (UNIX) ΕΡΓΑΣΤΗΡΙΟ. 9o ΕΡΓΑΣΤΗΡΙΟ

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ I

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

Mεταγλωττιστές. 4 ο εργαστηριακό μάθημα Λεξική ανάλυση και flex. Θεωρία

ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ. Στις βασικές έννοιες που σχετίζονται με τη λεξική ανάλυση. Στη δήλωση ορισμό κανονικών εκφράσεων

Λειτουργικά Συστήματα

επιµέλεια Θοδωρής Πιερράτος

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών: Εργαστηριακή Άσκηση

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

Λογικός τύπος Τελεστές σύγκρισης Λογικοί τελεστές Εντολές επιλογής Εμβέλεια Μαθηματικές συναρτήσεις Μιγαδικός τύπος ΔΕΥΤΕΡΗ ΔΙΑΛΕΞΗ

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Σχεδίαση Γλωσσών Προγραμματισμού Λεξική Ανάλυση Ι. Εαρινό Εξάμηνο Lec 05 & & 26 /02/2019 Διδάσκων: Γεώργιος Χρ.

Μια πρόταση διδασκαλίας για το μάθημα του προγραμματισμού Η/Υ στο Λύκειο με τη μεθοδολογία STEM

ΤΕΙΘ ΣΤΕΦ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΘΗΜΑ: ΕΙΣΑΓΩΓΗ ΣΤΑ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ (UNIX) ΕΡΓΑΣΤΗΡΙΟ. 3o ΕΡΓΑΣΤΗΡΙΟ

ΘΕΩΡΙΑ ΥΠΟΛΟΓΙΣΜΩΝ ΚΑΙ ΑΥΤΟΜΑΤΩΝ

Εισαγωγή στον Προγραμματισμό Εργαστήριο 3: Βοηθητικά προγράμματα του Linux CLI. Οκτώβριος 2014 Χ. Αλεξανδράκη Γ. Δημητρακάκης

ΚΕΦΑΛΑΙΟ 7 ο. Έτσι ο προγραµµατισµός µε τη ΓΛΩΣΣΑ εστιάζεται στην ανάπτυξη του αλγορίθµου και τη µετατροπή του σε σωστό πρόγραµµα.

Βάσεις Δεδομένων Ι 6. Ιδιότητες πεδίων. Τμήμα Διοίκησης Επιχειρήσεων (Μεσολόγγι) ΤΕΙ Δυτικής Ελλάδας

Mε την ονομασία Unix ή μάλλον Unix-like αναφερόμαστε

Ενότητα 2. Ζωγραφίζοντας με το ΒΥΟΒ

Επιλογή και επανάληψη. Λογική έκφραση ή συνθήκη

Θέματα Προγραμματισμού Η/Υ

Κεφάλαιο 2 Η έννοια και η παράσταση της πληροφορίας στον ΗΥ. Εφ. Πληροφορικής Κεφ. 2 Καραμαούνας Πολύκαρπος 1

2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ

ΠΛΗΡΟΦΟΡΙΚΗ Ι (MATLAB) Ενότητα 1

Ανάπτυξη και Σχεδίαση Λογισμικού

Κεφάλαιο 1. Βασικά Στοιχεία της Java... 13

Διαδικασιακός Προγραμματισμός

Βασικές Αρχές Προγραμματισμού

Πρόλογος. if (παράσταση) εντολή1 else εντολή2. Από εδώ και πέρα θα αναφέρεται ως K&R.

Στο εργαστήριο θα μελετηθούν: Διδάσκων: Γιώργος Χατζηπολλάς. Εργαστήριο 2: Εργαλεία Συστήματος UNIX. Ομάδες για παρουσίαση

ΗΥ-150. Προγραμματισμός

ΔΟΜΗ ΕΠΙΛΟΓΗΣ. Οι διάφορες εκδοχές της

ΗΥ-150. Προγραμματισμός

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

Έναρξη Τερματισμός του MatLab

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 7 και 8: Αναπαραστάσεις. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος

Η SQL αποτελείται από δύο υποσύνολα, τη DDL και τη DML.

Ενδεικτικές Ερωτήσεις Θεωρίας

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

Εισαγωγή στη γλώσσα προγραμματισμού Fortran 95

ΚΕΦΑΛΑΙΟ 3. Εκφράσεις, τελεστές, σχόλια. 3.1 Εισαγωγή

Προγραμματισμός Η/Υ. Ενότητα 4: Εντολές Επιλογής

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Υπερφόρτωση τελεστών

Αρχές Προγραμματισμού Η/Υ Μέθοδοι παρουσίασης του αλγόριθμου και Βασικές έννοιες

Δομές Ακολουθίας- Επιλογής - Επανάληψης. Δομημένος Προγραμματισμός

Μεταγλωττιστές. Ενότητα 6: Λεκτική ανάλυση (Μέρος 2 ο ) Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ

Δίκτυα Η/Υ στην Επιχείρηση

Η γλώσσα προγραμματισμού Strange

Transcript:

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

Μια κανονική έκφραση είναι ένας σύντομος και σαφής τρόπος έκφρασης οποιουδήποτε συνδυασμού χαρακτήρων. Οι κανονικές εκφράσεις (RE) αποτελούνται από συνδυασμό κανονικών χαρακτήρων με έναν ή περισσότερους μεταχαρακτήρες. Οι μεταχαρακτήρες είναι χαρακτήρες με ειδική σημασία που καθορίζεται από το φλοιό που τους χρησιμοποιεί (π.χ. χ Bourne, Korn, ή C-shell). 2

Οι κανονικές κές εκφράσεις μπορούν να χρησιμοποιηθούν σε εντολές και προγράμματα του UNIX για: Να προσδιορίσουν ονόματα αρχείων Να ανιχνεύσουν περιεχόμενα αρχείων Να μεταβάλλουν περιεχόμενα αρχείων Κάθε εντολή του UNIX διαφέρει όσον αφορά τον τύπο των RE που υποστηρίζει. Ο προσδιορισμός των RE που υποστηρίζονται από κάθε εντολή είναι προτιμότερο να γίνεται ελέγχοντας την εντολή μέσω της εντολής man (manual pages) 3

Παραδείγματα Οι κανονικές αο εκφράσεις χρησιμοποιούνται ο ού κυρίως για την αναζήτηση αλφαριθμητικών γενικής μορφής σε ένα αρχείο. Π.χ. Για την εύρεση όλων των γραμμών ενός αρχείου που περιέχουν ένα από τα παρακάτω: Τη λέξη Unix, Τη λέξη UNIX, Ένα πρότυπο (pattern) που αποτελείται από 4 ψηφία Έναν ταχυδρομικό κωδικό, Ένα όνομα, Όλα τα φωνήεντα σε αλφαβητική σειρά. 4

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

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

Κανονική έκφραση Μια κανονική έκφραση είναι παρόμοια με μια μαθηματική έκφραση. Μια μαθηματική έκφραση αποτελείται από τελεστέους (operands) και τελεστές (operators). Μια κανονική έκφραση αποτελείται από atoms και operators. Το atom προσδιορίζει αυτό που αναζητούμε και το σημείο του κειμένου όπου υπάρχει αντιστοιχία. Ένας operator συνδυάζει atoms σε σύνθετες εκφράσεις. 7

Atoms 8

Παράδειγμα προτύπου ενός χαρακτήρα Το απλούστερο atom είναι ένας χαρακτήρας. 9

Παράδειγμα Dot Atom Μια τελεία (dot) αντιστοιχεί με οποιοδήποτε απλό χαρακτήρα εκτός από τον new line character (\n). 10

Παράδειγμα Class Atom Μια class atom ορίζει ένα σύνολο ASCII χαρακτήρων, καθένας από τους οποίους μπορεί να αντιστοιχεί με οποιουσδήποτε χαρακτήρες ακτή του κειμένου. Το σύνολο χαρακτήρων που χρησιμοποιείται στη διαδικασία αντιστοίχισης (matching process) περικλείεται σε αγκύλες. Μια περιοχή (range) χαρακτήρων κειμένου ορίζεται με μια παύλα (-) π.χ. [a-d] Το ^ είναι ένας χαρακτήρας εξαίρεσης π.χ. κάθε χαρακτήρας εκτός από φωνήεν, χρησιμοποιείται ην έκφραση [^aeiou]. 11

Παραδείγματα κλάσεων Ο escape character (\) χρησιμοποιείται όταν ο αντιστοιχούμενος χαρακτήρας είναι ένας από τους και ^ 12

Anchors Anchors : είναι atoms που χρησιμοποιούνται για να αντιστοιχήσουν το πρότυπο σε ένα συγκεκριμένο τμήμα Τα Anchors δεν αντιστοιχούνται στο κείμενο αλλά καθορίζουν το σημείο όπου πρέπει να βρεθεί ο επόμενος χαρακτήρας στο πρότυπο. 13

Operators Μπορούμε να συνδυάσουμε atoms με operators. 14

Παραδείγματα Sequence Operator Ο τελεστής ακολουθίας (sequence operator) δεν υπάρχει. Αυτό σημαίνει ότι αν μια σειρά από atoms φαίνονται α σε μια κανονική έκφραση, υποδηλώνεται η παρουσία ενός αόρατου sequence operator ανάμεσά τους. 15

Παράδειγμα χρήσης Sequence Operator 16

Τελεστής εναλλαγής (Alternation Operator ) Ο τελεστής εναλλαγής (alternation ti operator) χρησιμοποιείται για να ορίσει μια ή περισσότερες εναλλακτικές περιπτώσεις 17

Αντιστοίχιση Alternation Operators 18

Τελεστής επανάληψης (Repetition Operator) Ο τελεστής επανάληψης (repetition operator) καθορίζει ότι το atom ή η έκφραση που υπάρχει ακριβώς πριν από την επανάληψη μπορεί να επαναληφθεί. m είναι ο ελάχιστος αριθμός επαναλήψεων. n είναι ο μέγιστος αριθμός επαναλήψεων. 19

Βασικές φόρμες επανάληψης 20

Παραδείγματα με τελεστές επανάληψης 21

Επαναλαμβανόμενη αντιστοίχιση προτύπων 22

Τελεστής ομαδοποίησης (Group Operator) Ο group operator είναι ένα ζεύγος παρενθέσεων που ανοίγουν και κλείνουν. Όταν μια ομάδα χαρακτήρων περικλείεται σε παρενθέσεις ο επόμενος τελεστής εφαρμόζεται σε όλη την ομάδα. 23

Η οικογένεια grep Οι εντολές grep, egrep, fgrep χρησιμοποιούνται για την αντιστοίχιση ενός προτύπου χαρακτήρων Για την ομαλή λειτουργία οι κανονικές εκφράσεις πρέπει να περικλείονται σε οριοθέτες (π.χ. ) ώστε ο φλοιός να διερμηνεύσει τους χαρακτήρες που περιέχονται στην κανονική έκφραση ως grep special characters και όχι ως shell special characters 24

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

Μορφές κανονικών εκφράσεων : Απλό κείμενο grep unix file (αναζητεί ζ ί όλες τις εμφανίσεις της λέξης unix στο αρχείο file και εμφανίζει τις γραμμές που περιέχονται) ) Κείμενο που περιέχει ειδικούς χαρακτήρες grep [uu]nix file (αναζητεί unix και Unix) 26

Παραδείγματα $ grep studin /etc/passwd Αναζητούνται και εμφανίζονται όλες οι γραμμές του αρχείου passwd που περιέχουν το πρότυπο studin. $ grep ^studin /etc/passwd Αναζητούνται και εμφανίζονται όλες οι γραμμές του αρχείου passwd που ξεκινούν με το πρότυπο studin 27

Άσκηση η Να προσδιοριστεί ορ στε ένα πρότυπο που θα εμφανίζει όλες τις γραμμές του αρχείου passwd που ξεκινούν με τη λέξη studin και στη συνέχεια δεν θα ακολουθεί πεζός χαρακτήρας. $ grep ^studin[^a-z] /etc/passwd $ grep ^studin[a-z] /etc/passwd Εμφανίζει τις γραμμές που εξαιρέθηκαν από το προηγούμενο πρότυπο 28

Wildcards & Κανονικές Εκφράσεις Οι χαρακτήρες μπαλαντέρ αατέρ(wildcards) είναι ένα εργαλείο ε που επιτρέπει την αναφορά σε ονόματα αρχείων με συγκεκριμένα χαρακτηριστικά. Οι κανονικές εκφράσεις ή παραστάσεις (regular expressions - RE) είναι διαφορετικά και πιο ισχυρά εργαλεία λί ταιριάσματος προτύπων (pattern-matching). t Οι RE διερμηνεύονται και χρησιμοποιούνται από ειδικές λειτουργίες (π.χ. χ grep, sed). Οι χαρακτήρες μπαλαντέρ στα ονόματα αρχείων διερμηνεύονται από τον φλοιό και έχουν μεγαλύτερη προτεραιότητα, ενώ οι κανονικές εκφράσεις από τις εντολές που τις χρησιμοποιούν. 29

Κανόνες δημιουργίας & αντιστοίχισης κανονικών εκφράσεων Οι χαρακτήρες :.,*,, [,\ είναι ειδικοί χαρακτήρες εκτός όταν εμφανίζονται ανάμεσα σε [ ] Ο χαρακτήρας ^ είναι ειδικός χαρακτήρας όταν είναι ο πρώτος που εμφανίζεται σε μια κανονική έκφραση και όταν είναι ο πρώτος χαρακτήρας μέσα σε [ ] Ο χαρακτήρας $ είναι ειδικός χαρακτήρας όταν είναι τελευταίος Ένας ειδικός χαρακτήρας που έχει μπροστά \ είναι ο ίδιος ο χαρακτήρας (escape chars) 30

Πίνακας συμβολισμού μ κανονικών εκφράσεων Συμβολισμός c Σημασία Αντιστοιχεί στον χαρακτήρα c \c Αναγκάζει το c να διαβαστεί μόνον ως το γράμμα c ^ Ταυτοποιείται κατά την αναζήτηση με την αρχή της γραμμής $ Ταυτοποιείται κατά την αναζήτηση με το τέλος της γραμμής. Ταυτοποιείται με ένα και μόνο χαρακτήρα [xy] Κάθε μεμονωμένος χαρακτήρας που περιέχεται στο σύνολο [^xy] Κάθε μεμονωμένος χαρακτήρας που δεν περιέχεται στο σύνολο (exclusion set) 31

Συμβολισμός Σημασία c* καμία ή περισσότερες εμφανίσεις του χαρακτήρα c * 0 ή περισσότερες εμφανίσεις της έκφρασης που προηγείται + 1 ή περισσότερες εμφανίσεις της έκφρασης που προηγείται? 0 ή 1 εμφανίσεις της έκφρασης που προηγείται 32

Παραδείγματα Όλες οι γραμμές που δεν ξεκινούν από κεφαλαίο αγγλικό χαρακτήρα : grep '^[^A A-Z]' file Όλες οι γραμμές που περιέχουν!,&,* : grep '[\!\*\&] file Όλες οι γραμμές που περιέχουν την τιμή $1.99 : grep '\$1\.99 file Όλες οι γραμμές με μήκος 2 χαρακτήρες α : grep '^..$ file ή ^.\{2\}$ 33

Όλες οι γραμμές που έχουν μήκος ακριβώς 17 χαρακτήρες: grep '^.\{17\}$ file Όλες οι γραμμές που έχουν μήκος τουλάχιστον 25 χαρακτήρες: grep '^.\{25,\}$' Όλες οι γραμμές που δεν έχουν μήκος 3 χαρακτήρες: grep v '^...$ file 34

Όλες οι γραμμές που ξεκινούν με * : ^\* Όλες οι γραμμές που δεν περιέχουν αριθμούς : ^[^0 9]*$ Όλες οι γραμμές που περιέχουν τα έτη 1991 έως 1995 : 199[1-5] Οποιαδήποτε ακολουθία χαρακτήρων δεν περιέχει ψηφία: [A-Za-z][A-Za-z]* 35

Οποιοσδήποτε προσημασμένος ακέραιος : [+\-][0-9][0-9]* Οποιαδήποτε ακολουθία χαρακτήρων :.* (ιδιωματισμός!) Οποιοδήποτε αναγνωριστικό (identifier) : [a-za-z_][a-za-z_0-9]* Οποιοσδήποτε πραγματικός αριθμός χωρίς πρόσημο: [0-9]+[.][0-9]+ [0-9]*[.][0-9]* 36

Οποιοδήποτε πλήθος από * ακολουθούμενο από οποιοδήποτε πλήθος \: \**\\* Ώρα σε 12ωρη βάση: 1*[012]*[1-9]*:[0-5][0-9] [ $ grep :$ /etc/passwd (οι γραμμές στις οποίες δεν περιέχεται login shell) $ grep $100* * (αναζητεί όλα τα αρχεία στα οποία υπάρχει το ποσό $100) 37

$ grep z* /etc/passwd (οι γραμμές με 0 ή περισσότερα z) $ grep zz* /etc/passwd (οι γραμμές με 1 ή περισσότερα z) 38

Να εξηγήσετε την εντολή : ls -l grep '^d...x' Εμφανίζει όλα τα directories του current directory στα οποία οι υπόλοιποι χρήστες (other) έχουν δικαίωμα execute 39

Υποθέτουμε ότι στο αρχείο passwd οι ημερομηνίες είναι στη μορφή : Feb 9, 1999. Ποια είναι η μορφή της κανονικής έκφρασης; [A-Z][a-z]* ]* [0-9]\{1,2\}, [0-9]\{4\} [A-Z][a-z]\{3,\} ]\{3 \} [0-9]\{1,\}, \} [0-9]\{4\} 40

Ποια είναι η μορφή της κανονικής έκφρασης για τηλεφωνικούς αριθμούς της περιοχής Θεσσαλονίκης; (πρόθεμα : 2310, 2391,2392, 2392, 2396 και αριθμός εξαψήφιος στη μορφή : 23ΧΧ-ΧΧΧ-ΧΧΧ) ΧΧΧ ΧΧΧ) 23[19][0-6]-[0-9]\{3\}-[0-9]\{3\} [0 9]\{3\} [0 9]\{3\} 41

Επεκτεταμένες RE : Η εντολή egrep Είναι υπερσύνολο της grep. Αναζητεί και αντιστοιχεί όλες τις περιπτώσεις κανονικών εκφράσεων της grep και επιπλέον : Μια RE που ακολουθείται από το + αντιστοιχεί μία ή περισσότερες ταυτίσεις της RE Μια RE που ακολουθείται από το? αντιστοιχεί καμία ή μία ταυτίσεις της RE Πολλαπλές RE διαχωριζόμενες με αντιστοιχούνται με οποιαδήποτε από τις RE που περιέχονται. Μια RE μπορεί να περικλείεται σε παρενθέσεις για ομαδοποίηση 42

Παραδείγματα : $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 43

Παραδείγματα με την egrep # όλες οι γραμμές που ξεκινούν με # egrep '(^#)' /etc/rc # όλες οι γραμμές που ΕΝ ξεκινούν με # egrep '(^[^#])' /etc/rc # όλες οι γραμμές που ξεκινούν με e, f ή g. egrep '(^[efg])' /etc/rc # όλες οι γραμμές που ξεκινούν με κεφαλαίο γράμμα egrep '(^[A [A-Z])' /etc/rc 44

# όλες οι γραμμές που ΕΝ ξεκινούν με κεφαλαίο γράμμα $egrep '(^[^A-Z])' /etc/rc # όλες οι γραμμές που περιέχουν! * & $egrep '([\!\*\&])' /etc/rc # όλες οι γραμμές που περιέχουν! * & αλλά δεν ξεκινούν με # $egrep '([^#][\!\*\&])' /etc/rc 45

Η εντολή fgrep (file-based grep/fast grep) Χρησιμοποιείται για την ταυτόχρονη αναζήτηση πολλαπλών προτύπων και δεν χρησιμοποιεί μετα- χαρακτήρες. ένα αρχείο προτύπων περιλαμβάνει οποιοδήποτε πρότυπο θα αντιλαμβάνεται η grep και προσδιορίζεται από την επιλογή f. $fgrep f pattern_file file Το pattern_file περιέχει τα πρότυπα 46

Αποθήκευση (save) Ο τελεστής αποθήκευσης \( \) αντιγράφει το αλφαριθμητικό που περικλείεται σε μια προσωρινή μνήμη (buffer ή register) για μεταγενέστερη χρήση. Υπάρχουν συνολικά εννέα (9) buffers που αριθμούνται από \1 έως \9 \1: είναι το τμήμα κειμένου που αντιστοιχεί στην πρώτη κανονική αο έκφραση σε παρένθεση \2: είναι το τμήμα κειμένου που αντιστοιχεί στην δεύτερη κανονική έκφραση σε παρένθεση.. 47

'^\([a-z]\)\1' παραδείγματα Αναζητεί και εμφανίζει τις γραμμές που ξεκινούν από ένα ζεύγος όμοιων γραμμάτων. '\([a-z][a-z]*\)\1\1' Αναζητεί και εμφανίζει τις γραμμές που περιέχουν τουλάχιστον τρία αντίγραφα ενός συνόλου χαρακτήρων που αποτελείται από πεζά γράμματα. 48

Bill\(.\)Gates\1 \) \ αναζητεί ένα πρότυπο αλφαριθμητικού που ξεκινά με τη λέξη Bill,, ακολουθούμενη από ένα χαρακτήρα (πλην του χαρακτήρα αλλαγής γραμμής), ακολουθούμενο από τη λέξη Gates, ακολουθούμενη από τον ίδιο ένα χαρακτήρα. Η παρακάτω ακολουθία αντιστοιχεί στο πρότυπο: Bill!Gates! Bill-Gates- αλλά όχι η ακολουθία: Bill?Gates! Bill-Gates 49

a\( a\(.\)b\(.\)c\2d\1\)b\( \)c\2d\1 Το παράδειγμα αφορά ένα πρότυπο που ξεκινά με a, ένα χαρακτήρα (#1), ακολουθούμενο από το b, ακολουθούμενο από έναν άλλο χαρακτήρα (#2), c, το χαρακτήρα #2, d, και το χαρακτήρα #1. Η παρακάτω ακολουθία αντιστοιχεί στο πρότυπο: a-b!c!d- 50