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

Σχετικά έγγραφα
(Regular Expressions) ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ: ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ/ ΧΕΙΜ

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

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

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

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

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

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

Fixed Character strings

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Σειριακό Τερματικό Serial Terminal (Dumb Terminal)

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

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

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

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

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

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

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

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

Εργαστήριο 6 Ασκήσεις: To Εργαλείo Ωφελιμότητας Awk Προγραμματισμός Κελύφους Bash

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

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

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

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

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

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

Χρονικές σειρές 1 ο μάθημα: Εισαγωγή στη MATLAB

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

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

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

Transcript:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Τελεστής εναλλαγής (Alternation Operator ) Ο τελεστής εναλλαγής (alternation operator) χρησιμοποιείται για να ορίσει μια ή περισσότερες εναλλακτικές περιπτώσεις ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ - 03 17

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Υποθέτουμε ότι στο αρχείο 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 40

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

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

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

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

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

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

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

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

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