slajdy

Transkrypt

slajdy
Wyrażenia regularne
Podsumowanie
Wstęp do systemów wielozadaniowych
laboratorium 05 — Wyrażenia regularne
Jarosław Piersa
Wydział Matematyki i Informatyki, Uniwersytet Mikołaja Kopernika
2013-10-22
J. Piersa
WSWZ 2013/2014 Laboratorium 05
Wyrażenia regularne
Podsumowanie
Proste dopasowanie tekstu
Dopasowanie dowolnych znaków
Dopasowanie na początku / końcu wiersza
Zakres znaków
Dlaczego?
zaawansowanie wyszukiwanie wzorców w tekstach
zastępowanie wzorców
dopasowanie wzorców przy pracy z tekstami
współpraca z m. in. Vi, grep, sed, perl, językami programowania
etc.
J. Piersa
WSWZ 2013/2014 Laboratorium 05
Wyrażenia regularne
Podsumowanie
Proste dopasowanie tekstu
Dopasowanie dowolnych znaków
Dopasowanie na początku / końcu wiersza
Zakres znaków
Prosty przykład
Chcemy z pliku /etc/passwd wybrać linie zawierające któreś ze
słów: Jan, Janusz lub root
grep -E
"Jan|Janusz|root" /etc/passwd
w vi nieco inaczej: /Jan\|Janusz\|root
zastępowanie w vi:
:%s/Jan\|Janusz\|root/ZASTEPUJACY NAPIS/g
J. Piersa
WSWZ 2013/2014 Laboratorium 05
Wyrażenia regularne
Podsumowanie
Proste dopasowanie tekstu
Dopasowanie dowolnych znaków
Dopasowanie na początku / końcu wiersza
Zakres znaków
Prosty przykład
Nie jesteśmy pewni czy pisaliśmy z polskimi czcionkami czy bez.
chcemy z pliku /etc/passwd wybrać linie zawierające któreś ze
słów: Jas lub Jaś
grep -E
"Ja[sś]" /etc/passwd
podobnie możemy wyszukać ciągów w vi:
/Ja[sś]
J. Piersa
WSWZ 2013/2014 Laboratorium 05
Wyrażenia regularne
Podsumowanie
Proste dopasowanie tekstu
Dopasowanie dowolnych znaków
Dopasowanie na początku / końcu wiersza
Zakres znaków
Ćwiczenie
napisz wyrażenie, które dopasuje wszystkie imiona: Ala Ola
Ula Ela
napisz wyrażenie, które dopasuje tekst: Gżegżółka z
możliwością zapisania z małej litery, lub bez polskich znaków
J. Piersa
WSWZ 2013/2014 Laboratorium 05
Wyrażenia regularne
Podsumowanie
Proste dopasowanie tekstu
Dopasowanie dowolnych znaków
Dopasowanie na początku / końcu wiersza
Zakres znaków
Dopasowanie na początku i końcu linii
znak . (kropka) jest synonimem dowolnego znaku (w tym
również spacji)
przykładowo A.a dopasuje Ala, ale również Aga, A8a, A a itd.
znak * oznacza ziterowanie (również zerowe!) wystąpienia
poprzedzającego go znaku
znak + oznacza ziterowanie (przynajmniej jeden raz) wystąpienia
poprzedzającego go znaku
przykładowo A.*a dopasuje dowolny ciąg znaków zaczynający
się od A i kończący na a.
J. Piersa
WSWZ 2013/2014 Laboratorium 05
Wyrażenia regularne
Podsumowanie
Proste dopasowanie tekstu
Dopasowanie dowolnych znaków
Dopasowanie na początku / końcu wiersza
Zakres znaków
Ćwiczenie
dopasuj dowolny ciąg znaków rozpoczynający się od r i kończący
na t
dopasuj dowolnie długi ciąg liter A
dopasuj niepusty ciąg liter A
dopasuj ciąg liter zawierający przynajmniej 3 wystąpienia A
dowolny ciąg liter A lub B
J. Piersa
WSWZ 2013/2014 Laboratorium 05
Wyrażenia regularne
Podsumowanie
Proste dopasowanie tekstu
Dopasowanie dowolnych znaków
Dopasowanie na początku / końcu wiersza
Zakres znaków
Dopasowanie na początku i końcu linii
znak ^ jest synonimem początku wiersza
przykładowo ^root dopasuje tylko takie wystąpienia napisu
root które są pierwszym słowem w danej linii
podobnie znak $ oznacza koniec wiersza
aby wyszukać literalnie należy je poprzedzić za pomocą \
usuń komentarze shellowe (tj od # do końca wiersza) w pliku
/etc/sudoers
J. Piersa
WSWZ 2013/2014 Laboratorium 05
Wyrażenia regularne
Podsumowanie
Proste dopasowanie tekstu
Dopasowanie dowolnych znaków
Dopasowanie na początku / końcu wiersza
Zakres znaków
Ćwiczenie
znajdź wystąpienia słowa root na początku linii
znajdź wystąpienia słowa bash na końcu linii
znajdź puste linie
znajdź linie w których jest dokładnie jedna litera
usuń komentarze typu // w kodzie
J. Piersa
WSWZ 2013/2014 Laboratorium 05
Wyrażenia regularne
Podsumowanie
Proste dopasowanie tekstu
Dopasowanie dowolnych znaków
Dopasowanie na początku / końcu wiersza
Zakres znaków
Zakresy
nawiasy kwadratowe [] służą do definiowania zbioru lub zakresu
znaków do dopasowania
np: 199[01234] rok
litery małe i wielkie oraz cyfry mogą być łączone w zakresy przez
np: ro[a-z]t, litera [A-Z], mam [1-2][0-9] lat
znak ^ odwraca dopasowanie, tj dopasuje wszystko co nie jest
wymienione:
\r[^o]t dopasuje m. in. rat, ret, r t, ale nie rot
J. Piersa
WSWZ 2013/2014 Laboratorium 05
Wyrażenia regularne
Podsumowanie
Proste dopasowanie tekstu
Dopasowanie dowolnych znaków
Dopasowanie na początku / końcu wiersza
Zakres znaków
Ćwiczenie
znajdź liczby między 1000 a 3999
znajdź liczby parzyste większe niż 100
znajdź znajdź słowa składające się tylko z małych lub wielkich
liter, rozpoczynające się od r i kończące na t
znajdź tagi w kodzie html
znajdź tagi url (tj. a) w kodzie html
znajdź wiersze, które nie zawierają żadnej litery ani cyfry
znajdź komentarze w kodzie Pascalu typu (* ... *) (zał.
komentarz mieści się w jednej linijce)
J. Piersa
WSWZ 2013/2014 Laboratorium 05
Wyrażenia regularne
Podsumowanie
Proste dopasowanie tekstu
Dopasowanie dowolnych znaków
Dopasowanie na początku / końcu wiersza
Zakres znaków
Dopasowanie powtórzeń
nawiasy klamrowe {} służą do definiowania ilości oczekiwanych
powtórzeń
UWAGA: w vi nawiasy muszą być poprzedzone \
np: a{ 8 }
dokładnie 8 powtórzeń wzorca poprzedzającego
np: (Ala){ 2,5 }
między 2 a 5 powtórzeń wzorca
np: [a-z]{ 2, } między 2 a 5 powtórzeń wzorca
przynajmniej dwa powtórzenia
J. Piersa
WSWZ 2013/2014 Laboratorium 05
Wyrażenia regularne
Podsumowanie
Proste dopasowanie tekstu
Dopasowanie dowolnych znaków
Dopasowanie na początku / końcu wiersza
Zakres znaków
Ćwiczenie
znajdź loginy dwuznakowe w pliku /etc/passwd (za krótkie)
znajdź loginy przynajmniej ośmio-znakowe w pliku /etc/passwd
znajdź loginy, które zawierają przynajmniej dwie cyfry
znajdź adresy IP v4 (skorzystaj z pliku /etc/hosts)
znajdź poprawne adresy IP, tj. każda liczba między 0 a 255
J. Piersa
WSWZ 2013/2014 Laboratorium 05
Wyrażenia regularne
Podsumowanie
Proste dopasowanie tekstu
Dopasowanie dowolnych znaków
Dopasowanie na początku / końcu wiersza
Zakres znaków
Znaki specjalne
aby usunąć specjalne znaczenie znaków należy poprzedzić je
backslashem
w szczególności \\ dopasuje pojedynczy backslash
J. Piersa
WSWZ 2013/2014 Laboratorium 05
Wyrażenia regularne
Podsumowanie
Proste dopasowanie tekstu
Dopasowanie dowolnych znaków
Dopasowanie na początku / końcu wiersza
Zakres znaków
Ćwiczenie
znajdź w kodzie latex-owym \begin oraz \end
znajdź w kodzie latex-owym \begin{} oraz \end{} wraz z
argumentami
znajdź w swojej stronie domowej adresy do innych stron,
leżących na http://www.mat.umk.pl (jeżeli nie ma takich, to
dopisz)
znajdź w pliku backslash na końcu linii
J. Piersa
WSWZ 2013/2014 Laboratorium 05
Wyrażenia regularne
Podsumowanie
Proste dopasowanie tekstu
Dopasowanie dowolnych znaków
Dopasowanie na początku / końcu wiersza
Zakres znaków
Grupowanie
fragmenty wyrażeń można grupować w nawiasach ()
przykładowo (123)+ dopasuje powtórzenia wielokrotne napisu
np. 123123123, ale już nie np 12131
w vi trzeba je poprzedzić \( \)
w vi w zastępowaniu (:s) można do takiego dopasowania odnosić
się za pomocą \1 — pierwsze nawiasy do \9 — dziwiąte nawiasy
np. :%s/\(Ala\) \(Ola\)/\2 \1/g
zamieni napis Y na Ola Ala
J. Piersa
WSWZ 2013/2014 Laboratorium 05
Wyrażenia regularne
Podsumowanie
Proste dopasowanie tekstu
Dopasowanie dowolnych znaków
Dopasowanie na początku / końcu wiersza
Zakres znaków
Ćwiczenie
znajdź ciągi powtórzeń słowa Ala
znajdź ciągi skłdające się ze słów Ala lub Ola
znajdź studentów matematyki lub informatyki o imionach
Jarosław lub Michal
J. Piersa
WSWZ 2013/2014 Laboratorium 05
Wyrażenia regularne
Podsumowanie
Po dzisiejszych zajęciach powinienem umieć:
konstruować wyrażenia regularne
wyszukiwać i zastępować tekst z wykorzystaniem wyrażeń
regularnych
Dla zainteresowanych: vimregex.com
J. Piersa
WSWZ 2013/2014 Laboratorium 05