Różne pożyteczne polecenia oraz wyrażenia regularne Kurs systemu Unix 1
O pracach (jobs) Pracą nazwiemy proces będący pod kontrolą powłoki. Przykład: % sort addresses > mail_list & [1] 21885 % [1] oznacza numer pracy, przypisany przez aktualną powłokę Obecnie aktywne pracę możemy wyświetlić za pomocą polecenia jobs. Każda z prac znajduje może być wykonywana (running) lub zatrzymana stopped, dodatkowo może dojść znak + (aktualna praca) oraz - oznaczający pracę poprzednią. Kurs systemu Unix 2
Sterowanie pracami Do prac odwołujemy się pisząc %numer-pracy, domyślnie polecenia używają pracy bieżącej. Możliwe polecenia: bg przenosi do tła, fg przenosi z tła na pierwszy plan, bieżącą pracę możemy przenieść do tła za pomocą ^Z) Kurs systemu Unix 3
Polecenie find Rozbudowane polecenie służące do znajdywania plików oraz do wykonywania na nich pewnych operacji. Składnia: find lista-kartotek wyra»enia. Rekurencyjnie przegląda każdą kartotekę z listy kartotek Kryteria oddzielone spacją traktowane są jako połączone spójnikiem AND, spójnik OR osiągamy opcją -o. Negacja zapisywana jest za pomocą!. Kurs systemu Unix 4
Uwagi o składni Można stosować nawiasy, ale poprzedzone ukośnikiem, czyli \( oraz \). Każdy element wyrażenia jest osobnym argumentem i musi być od innych oddzielony spacją. Argumenty liczbowe występują w jednej z trzech postaci: +n, -n lub n oznaczające, odpowiednio wiecej niż, mniej niż lub dokładnie n. Kurs systemu Unix 5
Możliwości polecenia find -name nazwa-pliku pasuje do plików o nazwie zgodnej z nazw -pliku. Możliwe znaki specjalne, ale uwaga: trzeba zabronić powłoce rozwijania (za pomocą cudzysłowów). -type typpliku gdzie, typ pliku to jedna z poniższych literek: d f p l s kartoteka zwykły plik fifo (nazwany potok) łącze gniazdo -user login pasuje, gdy login jest właścicielem pliku -group gr podobnie Kurs systemu Unix 6
-size +/-n[c] jeżeli rozmiar pliku jest wyspecyfikowany przez n bloków, lub (c) znaków. -atime +/-n, -mtime +/-n pozwala znajdywać pliki do których był niedawno dostęp oraz te, które były niedawno modyfikowane (czas wyrażamy w dniach), -atime -2 oznacza pliki, do których był dostęp najpóźniej przedwczoraj. -newer filename pasuje do plików nowszych niż filename -print zawsze pasuje, drukuje ścieżkę. -ls podobnie, ale więcej informacji (jak ls -l) -exec command \; na końcu listy warunków, wykonuje polecenie dla plików, które pasują. W poleceniu {} oznacza nazwę aktualnie przeglądanego pliku. -ok command \; podobnie, ale zawsze wyświetla polecenie i Kurs systemu Unix 7
grzecznie pyta. Kurs systemu Unix 8
Przykład find czyszczący dysk find. \( -name core -o -name junk \) -print -exec rm {} \; Kurs systemu Unix 9
Wyrażenia regularne Wyrażenie regularne to opis pewnego zbioru ciągów znaków. Skojarzenia z językami formalnymi, gramatykami lewostronnymi, analizą leksykalną, automatami skończonymi są jak najbardziej uzasadnione. Składnia ulega pewnym wariacjom, ale można wyodrębnić dwie klasy: a) uproszczone b) pełne O uproszczonych to już było (np. [Cc]hap*.[1-5]?[^0-9]) Kurs systemu Unix 10
Pełne wyrażenia regularne (1) Najprostsze wr to pojedynczy znak. Opisuje ono ten właśnie znak.. opisuje dowolny znak, czyli w.n. pasuje do wino lub win3. Umieszczając dwa wr obok siebie wyrażamy ich konkatenację. * oznacza 0 lub więcej wystąpień poprzedzającego ją znaku (lub wr w nawiasie) Alternatywę wyrażeń opisuje się za pomocą, czyli np. ^(From Subject) pasuje do początku pliku z listem. Kurs systemu Unix 11
Pełne wyrażenia regularne (2) ^ pasuje do początku linii $ pasuje do końca linii (przykładowo ^$ pasuje do...?) Tu również możemy definiować znak z grupy, czyli: [aeiou], [1-9], [a-e1-9], [^A-Z]. ^ e nawiasach [] oznacza negację (dopełnienie). Początek i koniec słowa to \< oraz \>. Np. wzorzec br pasuje do słów bra i babra, natomiast wzorzec \<br tylko do tego pierwszego. Kurs systemu Unix 12
Pełne wyrażenia regularne (3)? oznacza, że poprzedzający go fragment może (lecz nie musi) wystąpić. + ma znaczenie podobne jak gwiazdka, ale wystąpień jest 1 lub więcej. Liczby wystąpień można wyrażać również za pomocą poniższych specyfikacji: a) \{n,m\} co najmniej n wystąpień, ale nie więcej niż m b) \{n\} dokładnie n wystąpień c) \{n,} co najmniej n wystąpień Specyfikację tę piszemy po wr, mniej więcej jak?, czy +. Kurs systemu Unix 13
Wyrażenia regularne (4) Wyrażenia regularne pozwalają określać bardzo bogate języki (niekoniecznie regularne), dzięki notacji \n, oznaczającej fragment dopasowany do n-tego nawiasu (licząc znaki '(' od lewej). Kurs systemu Unix 14
Przykłady Podwojone słowo: \<([A-Za-z]+) +\1\> Zmienna w C: [a-za-z_][a-za-z_0-9]* Kwota w dolarach (i centach): \$[0-9]+(\.[0-9][0-9])? Czas: (1[012] [1-9]):[0-5][0-9] (am pm) Kurs systemu Unix 15
Kurs systemu Unix 16
Wyrażenia regularne gdzie je możemy znaleźć W edytorach tekstu (np w vi), wywoływane za pomocą :/wzorzec. W programach przeglądających pliki (np. more czy less). W poleceniach grep, egrep,... We wsadowym edytorze sed. W językach programowania: awk, perl, tcl, python i wielu innych. Kurs systemu Unix 17
Programy grep oraz egrep Służą do wypisywania linii pasujących do wzorca pobranych z różnych plików. Podstawowe wywołanie to np. grep [opcje] wzorzec pliki. Używane są uproszczone wyrażenia regularne (grep), albo pełne (rozszerzone), w przypadku egrep oraz grep -E. Jeżeli użyjemy opcji -r, to w poszukiwaniach rekurencyjnie wchodzimy do kartotek. Opcja -v neguje dopasowanie: wypisujemy te, które nie pasują. Opcję -c stosujemy, gdy chcemy jedynie policzyć pasujące (niepasujące) linie. Kurs systemu Unix 18
Program SED Nazwę tłumaczymy: SED: Stream oriented, NonInteractive, Text Editor. Można stosować do automatycznego wykonywania prostych operacji edycyjnych. Najbardziej przydaje się do wykonywania regularnych podstawień w całym pliku. Kurs systemu Unix 19
Użycie SEDa sed 'lista komend edycyjnych' nazwy plików sed czyta linie z pliku i następnie stosuje do niej wszystkie komendy edycyjne... a wynik zapisuje na standardowym wyjściu. Jeżeli komendy są długie można je umieścić w pliku i skorzystać z opcji: -f nazwa-tego-pliku. Kurs systemu Unix 20
Ogólna postać polecenia edycyjnego [adres1, adres2] [funkcja] [argumenty] Za pomocą adresów wybieramy linie: 1. podając jej numery (dziesiętnie) 2. używając wyrażeń regularnych Kurs systemu Unix 21
Adresowanie Sposoby adresowania: brak adresu każda linia 1 adres każda linia pasująca do adresu 2 adresy (,) linie między linią pasującą do 1-go a pasującą do 2-go adres z! linie nie pasujące do adresu. Przy dwuadresowym trybie linie pasujące do ograniczeń sa rownież uwzględniane. Kurs systemu Unix 22
Proste przykłady Polecenie d oznacza pominięcię wskazanej linii. head -1 sed '1!d' tail -1 sed '$!d' grep <wzorec> sed '/wzorzec/!d' Wykrzyknik oznacza negację. Kurs systemu Unix 23
Przykłady nieco bardziej zaawansowane 6d usuwa szóstą linię, /^$/d usuwa puste linie, 1,10d usuwa linie od 1 do 10, 1,/^$/d usuwa linie od początku pliku do pierwszej pustej, /^$/,$d usuwa linie od pierwszej pustej do końca Zagadka: Co robi polecenie /^$/,/$/d? Kurs systemu Unix 24
Podstawianie Najbardziej użyteczne jest podstawianie, czyli polecenie s. Składnia komendy: s/<co>/<czym>/<opcje> g zastępuje wszystkie instancje, nie jedynie pierwszą Użycie: s/ala/ola/g Uwaga: w wyrażeniach regularnych w sed nawiasy piszemy jako \( oraz \). Kurs systemu Unix 25
Czym zastepujemy Ciągiem znaków (może on zawierac znaki specjalne): a) & - oznacza cały dopasowany napis. b) /d - oznacza to, co dopasowalo się do nawiasu d, przykładowo /3 Kurs systemu Unix 26
Przykłady Afirmacja liczb: sed 's/[0-9][0-9]*/& (naprawde &!)/g' Zamiana dwóch kolumn: sed 's/\(.*\):\(.*\)/\2:\1/' Przekształca: ala:kota kota:ala jola:psa => psa:jola jurek:chomika chomika:jurek Kurs systemu Unix 27
A co dla: ala:ma:kota? Kurs systemu Unix 28
AWK: pierwsza odsłona! AWK jest językiem programowania (będzie mu poświęcony następny wykład). Można go jednak traktować jako proste połączenie funkcjonalności następujących programów: grep, do wybierania interesujących linii, cut, do wybierania interesujących kolumn, tr -s [:blank:], ponieważ domyślnym separatorem jest ciąg spacji i tabulacji. Kurs systemu Unix 29
Program w awk Podstawowy program: /wzorzec1/{akcja1} /wzorzec2/{akcja2} /wzorzec3/{akcja3} Dla każdej linijki, jeżeli pasuje ona do wzorca to wykonana jest odpowiednia akcja. Najprostszy wzorzec to tekst. Pasowanie oznacza wówczas występowanie Najprostsza akcja to print. Oznacza ona wypisanie całej linii. Kurs systemu Unix 30
Dostęp do pól Zmienna $1 to pierwsze pole, $2 drugie itd. Cała bieżąca linia to $0. Przykład: wybranie z pliku dwóch kolumn i zamiana miejscami. awk '{print $3,$2 }' powyżej jako filtr, inna możliwość to awk -f program.awk dane_we1 dane_we2 > dane_wy Kurs systemu Unix 31
Składnia wyrażeń regularnych ^ początek pola $ koniec pola. 1 dowolny znak alternatywa wzorców * 0 lub więcej wystąpień tego co przed + 1 lub więcej wystąpień tego co przed? 0 lub 1 powtórzenie tewgo co przed [ ] znak z zestawu ([abcd]) [^abcd] znak spoza zestawu () nawiasy grupują podwyrażenia Kurs systemu Unix 32
Wyrażenia regularne Przykład: program wyświetlający te linie, które są liczbami /^[0-9]+(\.[0-9]+)?$/ { print $0 } W ten sposób uzyskujemy funkcjonalność programu grep. Kurs systemu Unix 33