1. Wyrażenia regularne Symbole w wyrażeniach regularnych 1 : Aby wyświetlić linie zawierające słowo Mouse z informacji dziennika zdarzeń jądra systemu, można użyć poniższego polecenia. dmesg wyświetla dziennik; przekierowuje rezultat pierwszego polecenia (dmesg) do drugiego polecenia (grep Mouse), które w tym przypadku wyszukuje wystąpienia frazy Mouse w rezultacie pierwszego polecenia. dmesg grep Mouse a) Napisz do czego służy polecenie grep. Załóż w katalogu roboczy plik tekstowy o nazwie wyrazenia i o następującej zawartości (ważne jest, aby plik miał poniższą strukturę z dokładnością do spacji): b) Wybierz z pliku wyrazenia linie zawierające słowo rysia. c) Wybierz z pliku wyrazenia linie zawierające ciąg znaków ow. 1 Tabela pochodzi ze strony http://jakilinux.org/konsola/wyszukiwanie-wyrazenia-regularne/ Kamil Żyła, Instytut Informatyki, Politechnika Lubelska 1
d) Wybierz z pliku wyrazenia linie, które zaczynają się od liczb z przedziału od 1 do 6, zawierają dwa dowolne znaki, literę a, a za nią dowolny ciąg znaków. e) Wybierz z pliku wyrazenia linie kończące się literą a. f) Wybierz z pliku wyrazenia linie zawierające dowolny ciąg znaków zaczynający się i kończący się literą a. Przekonaj się, że wyrażenie regularne a*a da rezultaty niezgodne z poleceniem. g) Wybierz z pliku wyrazenia" linie kończące się literą c, m lub s. h) Wybierz z pliku wyrazenia" linie nie kończące się literą a. i) Wybierz z pliku wyrazenia linie kończące się literą a i jednocześnie zawierające co najmniej dwie litery a. Aby przy użyciu jednego polecenia grep wyświetlić (suma zbiorów) - linie z pliku wyrazenia, które zaczynają się od liczb z przedziału od 1 do 6, zawierają dwa dowolne znaki, literę a, a za nią dowolny ciąg znaków - oraz linie zawierające dowolny ciąg znaków zaczynający się i kończący się literą a, można użyć poniższego polecenia: grep \(^[1-6]..a\)\ \(a.*a\) wyrażenia.txt W wyrażeniu powyżej użyto znaków, które bash traktuje jako znaki specjalne. Aby to ominąć, postawiono przed nimi znak \, a całość zamknięto w cudzysłów, aby uniknąć interpretowania przez bash tego wyrażenia (zrobi to grep). Nawiasy grupują 2 wyrażenia, oznacza sumę zbiorów. j) Wybierz z pliku wyrazenia linie (suma zbiorów) kończące się na literę a oraz zaczynające się od 1 lub 2. Kamil Żyła, Instytut Informatyki, Politechnika Lubelska 2
Bardzo krótkie wyrażenie regularne opisujące poprawny adres e-mail zgodnie ze standardem RFC 2822: (?:[a-z0-9!#$%&'*+/=?^_`{ }~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{ }~- ]+)* "(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d- \x7f] \\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a- z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])? \[(?:(?:25[0-5] 2[0-4][0-9] [01]?[0-9][0-9]?)\.){3}(?:25[0-5] 2[0-4][0-9] [01]?[0-9][0-9]? [a-z0-9- ]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53- \x7f] \\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\]) Znajdź błąd :) http://www.ex-parrot.com/pdw/mail-rfc822-address.html 2. Wyszukiwanie plików find przeszukuje drzewo katalogów w poszukiwaniu plików lub katalogów o podanej nazwie lub jej części, lub o podanych kryteriach. Składnia polecenia: find katalogi_startowe kryterium_wyszukiwania operacje_na_elementach Opcje: 1. name nazwa wyszukuje pliki i katalogi o podanej nazwie lub jej części (zaczyna od bieżącego katalogu w dół drzewa) 2. type typ wyszukuje elementy o określonym typie b urządzenie blokowe c urządzenie znakowe d katalog f zwykły plik l dowiązanie symboliczne s - gniazdo 3. size wartosc zwraca pliki o zadanym rozmiarze ( + -> większe niż wartosc; - -> mniejsze niż wartosc) c bajty k kilobajty M megabajty G - gigabajty 4. atime n ostatni dostęp miał miejsce n dni temu 5. mtime n plik został zmodyfikowany n dni temu 6. newer plik wyszukiwany plik został zmodyfikowany wcześniej niż podany plik 7. links n plik zawiera dokładnie n twardych dowiązań 8. perm p plik ma uprawnienia, gdzie p, to liczbowy tryb dostępu 9. user użytkownik właścicielem jest użytkownik Kamil Żyła, Instytut Informatyki, Politechnika Lubelska 3
10. group grupa właścicielem pliku jest grupa 11. empty puste pliki 12. maxdepth ile poziomów wgłąb przeszukać Operacje liczbowe można poprzedzać znakami + i -, wtedy to znaczy więcej i mniej niż podana wartość. Operacje na danych: 1. print domyślna operacja, wypisuje nazwy z adresami 2. ls wypisuje nazwy tak, jak lids 3. exec wykonanie dowolnego polecenia na znalezionych plikach 4. prune find nie wchodzi do wskazanych katalogów 5. ok działa jak exec, ale przed każdą operacją użytkownik jest proszony o potwierdzenie działania Przykład na prune dla jednego i wielu katalogów: Z. ~ - joe - joe.txt - proba - jan - roman - proba1 - jan 1) Szukać plików zaczynających się na j, nie przeszukiwać katalogu proba find. path */proba prune o name j* print 2) Szukać plików zaczynających się na j, nie przeszukiwać katalogu proba i proba1 find. path */proba prune o path */proba1 prune o name j* -print a) W katalogu domowym utwórz pusty plik wykonywalny o nazwie testxt. b) Wyszukaj przy pomocy find wszystkie katalogi w katalogu domowym. Nie przeszukuj podkatalogów katalogu domowego! c) Wyszukaj w katalogu domowym, przy pomocy find, katalog o nazwie Pulpit. d) W katalogu /var/log wyszukaj pliki z rozszerzeniem.log, które mają więcej niż 2kB i zapisz ich listę do pliku 2kb.txt. e) Wyszukaj w katalogu domowym, przy pomocy find, puste pliki należące do użytkownika student. f) Wyszukaj w katalogu domowym, przy pomocy find, pliki o nazwach rozpoczynających się od znaku 2 lub t. g) Wyszukaj w katalogu domowym, przy pomocy find, pliki o nazwach 6-znakowych. Wyłącz z wyszukiwania katalog Pulpit. W katalogu /var, przy pomocy find, znajdź pliki, których wielkość zawiera się w przedziale [2;5] kb i skopiuj je do katalogu test-kosz. find /var type f size +2k size 5k exec cp {} ~/test-kosz \; Kamil Żyła, Instytut Informatyki, Politechnika Lubelska 4
{} cały zbiór wyników \; - zakończenie polecenia do wykonania na wyniku wyszukiwania, pozwala na umieszczenie kolejnego bloku exec h) Wyszukaj w katalogu domowym, przy pomocy find, wszystkie pliki o uprawnieniach 644. i) Wyszukaj w katalogu domowym, przy pomocy find, wszystkie pliki wykonywalne. j) Wykonaj polecenie ls l na plikach z rozszerzeniem.log wyszukanych przez find w katalogu /var/log. Rezultat polecenia przekieruj do pliku ~/roboczy/logfiles. k) Wyszukaj w katalogu domowym, przy pomocy find, pliki nowsze niż plik o nazwie testxt. Inspiracją dla dzisiejszych zajęć, był artykuł: http://jakilinux.org/konsola/wyszukiwanie-wyrazenia-regularne/ http://tldp.org/howto/bash-prog-intro-howto-3.html http://www.linux.net.pl/~wkotwica/doc/find/find_3.html Kamil Żyła, Instytut Informatyki, Politechnika Lubelska 5