Ró˙zne po˙zyteczne polecenia oraz wyra˙zenia regularne
Transkrypt
Ró˙zne po˙zyteczne polecenia oraz wyra˙zenia regularne
Różne pożyteczne polecenia oraz wyrażenia regularne Kurs systemu Unix 1 O pracach (jobs) • Praca˛ nazwiemy proces b˛edacy ˛ pod kontrola˛ powłoki. Przykład: % sort addresses > mail_list & [1] 21885 % • [1] oznacza numer pracy, przypisany przez aktualna˛ powłok˛e • Obecnie aktywne prac˛e możemy wyświetlić za pomoca˛ polecenia jobs. • Każda z prac znajduje może być wykonywana (running) lub zatrzymana stopped, • dodatkowo może dojść znak + (aktualna praca) oraz - oznaczajacy ˛ prac˛e poprzednia.˛ Kurs systemu Unix 2 Sterowanie pracami • Do prac odwołujemy si˛e piszac ˛ %numer-pracy, domyślnie polecenia używaja˛ pracy bieżacej. ˛ • Możliwe polecenia: – bg przenosi do tła, – fg przenosi z tła na pierwszy plan, – bieżac ˛ a˛ prac˛e możemy przenieść do tła za pomoca˛ ^Z) Kurs systemu Unix 3 Polecenie find • Rozbudowane polecenie służace ˛ do znajdywania plików oraz do wykonywania na nich pewnych operacji. • Składnia: find lista-kartotek wyra»enia. • Rekurencyjnie przeglada ˛ każda˛ kartotek˛e z listy kartotek • Kryteria oddzielone spacja˛ traktowane sa˛ jako połaczone ˛ spójnikiem AND, spójnik OR osiagamy ˛ opcja˛ -o. Negacja zapisywana jest za pomoca˛ !. 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 spacja.˛ • Argumenty liczbowe wyst˛epuja˛ w jednej z trzech postaci: +n, -n lub n oznaczajace, ˛ 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 pomoca˛ cudzysłowów). • -type typpliku – gdzie, typ pliku to jedna z poniższych literek: d kartoteka f zwykły plik p fifo (nazwany potok) l łacze ˛ s 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˛ep oraz te, które były niedawno modyfikowane (czas wyrażamy w dniach), -atime -2 oznacza pliki, do których był dost˛ep najpóźniej przedwczoraj. • -newer filename – pasuje do plików nowszych niż filename • -print – zawsze pasuje, drukuje ścieżk˛e. • -ls – podobnie, ale wi˛ecej informacji (jak ls -l) • -exec command \; – na końcu listy warunków, wykonuje polecenie dla plików, które pasuja.˛ W poleceniu {} oznacza nazw˛e aktualnie przegladanego ˛ pliku. • -ok command \; – podobnie, ale zawsze wyświetla polecenie i Kurs systemu Unix 7 grzecznie pyta. Kurs systemu Unix 8 Przykład • find czyszczacy ˛ dysk find . \( -name core -o -name junk \) -print -exec rm {} \; Kurs systemu Unix 9 Wyrażenia regularne • Wyrażenie regularne to opis pewnego zbioru ciagów ˛ znaków. • Skojarzenia z j˛ezykami formalnymi, gramatykami lewostronnymi, analiza˛ leksykalna,˛ automatami skończonymi sa˛ jak najbardziej uzasadnione. • Składnia ulega pewnym wariacjom, ale można wyodr˛ebnić 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. Umieszczajac ˛ dwa wr obok siebie wyrażamy ich konkatenacj˛e. • * oznacza 0 lub wi˛ecej wystapień ˛ poprzedzajacego ˛ ja˛ znaku (lub wr w nawiasie) • Alternatyw˛e wyrażeń opisuje si˛e za pomoca˛ |, czyli np. ^(From|Subject) pasuje do poczatku ˛ pliku z listem. Kurs systemu Unix 11 Pełne wyrażenia regularne (2) • ^ pasuje do poczatku ˛ 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˛e (dopełnienie). • Poczatek ˛ 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 poprzedzajacy ˛ go fragment może (lecz nie musi) wystapić. ˛ • + ma znaczenie podobne jak gwiazdka, ale wystapień ˛ jest 1 lub wi˛ecej. • Liczby wystapień ˛ można wyrażać również za pomoca˛ poniższych specyfikacji: a) \{n,m\} co najmniej n wystapień, ˛ ale nie wi˛ecej niż m b) \{n\} dokładnie n wystapień ˛ c) \{n,} co najmniej n wystapień ˛ • Specyfikacj˛e t˛e piszemy po wr, mniej wi˛ecej jak ?, czy +. Kurs systemu Unix 13 Wyrażenia regularne (4) • Wyrażenia regularne pozwalaja˛ określać bardzo bogate j˛ezyki (niekoniecznie regularne), dzi˛eki notacji \n, oznaczajacej ˛ fragment dopasowany do n-tego nawiasu (liczac ˛ 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 pomoca˛ :/wzorzec. • W programach przegladaj ˛ acych ˛ pliki (np. more czy less). • W poleceniach grep, egrep, ... • We „wsadowym edytorze” sed. • W j˛ezykach programowania: awk, perl, tcl, python i wielu innych. Kurs systemu Unix 17 Programy grep oraz egrep • Służa˛ do wypisywania linii pasujacych ˛ do wzorca pobranych z różnych plików. • Podstawowe wywołanie to np. grep [opcje] wzorzec pliki. • Używane sa˛ 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 pasuja.˛ • Opcj˛e -c stosujemy, gdy chcemy jedynie policzyć pasujace ˛ (niepasujace) ˛ linie. Kurs systemu Unix 18 Program SED • Nazw˛e tłumaczymy: SED: Stream oriented, NonInteractive, Text Editor. • Można stosować do automatycznego wykonywania prostych operacji edycyjnych. • Najbardziej przydaje si˛e 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˛epnie stosuje do niej wszystkie komendy edycyjne ... • a wynik zapisuje na standardowym wyjściu. • Jeżeli komendy sa˛ 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 pomoca˛ adresów wybieramy linie: 1. podajac ˛ jej numery (dziesi˛etnie) 2. używajac ˛ wyrażeń regularnych Kurs systemu Unix 21 Adresowanie • Sposoby adresowania: brak adresu każda linia 1 adres każda linia pasujaca ˛ do adresu 2 adresy (,) linie mi˛edzy linia˛ pasujac ˛ a˛ do 1-go a pasujac ˛ a˛ do 2-go adres z ! linie nie pasujace ˛ do adresu. • Przy dwuadresowym trybie linie pasujace ˛ do ograniczeń sa rownież uwzgl˛edniane. Kurs systemu Unix 22 Proste przykłady • Polecenie d oznacza pomini˛eci˛e wskazanej linii. • head -1 — sed '1!d' • tail -1 — sed '$!d' • grep <wzorec> — sed '/wzorzec/!d' • Wykrzyknik oznacza negacj˛e. Kurs systemu Unix 23 Przykłady nieco bardziej zaawansowane • 6d – usuwa szósta˛ lini˛e, • /^$/d – usuwa puste linie, • 1,10d – usuwa linie od 1 do 10, • 1,/^$/d – usuwa linie od poczatku ˛ 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˛epuje wszystkie instancje, nie jedynie pierwsza˛ • Użycie: s/ala/ola/g • Uwaga: w wyrażeniach regularnych w sed nawiasy piszemy jako \( oraz \). Kurs systemu Unix 25 Czym zastepujemy • Ciagiem ˛ znaków (może on zawierac znaki specjalne): a) & - oznacza cały dopasowany napis. b) /d - oznacza to, co dopasowalo si˛e 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 jola:psa jurek:chomika Kurs systemu Unix => kota:ala psa:jola chomika:jurek 27 • A co dla: ala:ma:kota? Kurs systemu Unix 28 AWK: pierwsza odsłona! • AWK jest j˛ezykiem programowania (b˛edzie mu poświ˛econy nast˛epny wykład). • Można go jednak traktować jako proste połaczenie ˛ funkcjonalności nast˛epujacych ˛ programów: – grep, do wybierania interesujacych ˛ linii, – cut, do wybierania interesujacych ˛ kolumn, – tr -s [:blank:], ponieważ domyślnym separatorem jest ciag ˛ 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˛epowanie” • Najprostsza akcja to print. Oznacza ona wypisanie całej linii. Kurs systemu Unix 30 Dost˛ep do pól • Zmienna $1 to pierwsze pole, $2 drugie itd. Cała bieżaca ˛ 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 ^ poczatek ˛ pola $ koniec pola . 1 dowolny znak | alternatywa wzorców * 0 lub wi˛ecej wystapień ˛ tego co przed + 1 lub wi˛ecej wystapień ˛ tego co przed ? 0 lub 1 powtórzenie tewgo co przed [ ] [^abcd] () Kurs systemu Unix znak z zestawu ([abcd]) znak spoza zestawu nawiasy grupuja˛ podwyrażenia 32 Wyrażenia regularne • Przykład: program wyświetlajacy ˛ te linie, które sa˛ liczbami /^[0-9]+(\.[0-9]+)?$/ { print $0 } • W ten sposób uzyskujemy funkcjonalność programu grep. Kurs systemu Unix 33