- 1 - FILTRY Materia¸y pomocnicze do przedmiotu: Uýytkowanie Systemu Unix 1. Program grep. 1.1 Sk¸adnia. Posta• wywo¸ania programu jest nast«pujˆca: g...
8 downloads
9 Views
113KB Size
Politechnika Warszawska, Instytut Mikroelektroniki i Optoelektroniki
FILTRY Materia¸y pomocnicze do przedmiotu: Uýytkowanie Systemu Unix Opracowal dr inz. Andrzej Wielgus
1. Program grep. 1.1 Sk¸adnia. Posta• wywo¸ania programu jest nast«pujˆca: grep [opcje] wzorzec [plik]... gdzie: opcje - list« wybranych opcji zamieszczono w dalszej cz«æci, wzorzec - wyraýenie opisujˆce poszukiwany wzorzec, plik - nazwa pliku wejæciowego. 1.2 Opis dzia¸ania. Program grep poszukuje w strumieniu wejæciowym (stdin) oraz w plikach wejæciowych linii, kt—re pasujˆ do podanego wzorca. Kaýda znaleziona linia jest przesy¸ana w ca¸oæci na standardowy strumieÄ wyjæciowy (stdout). Wzorzec ma posta• dowolnego wyraýenia, w kt—rym mogˆ wystˆpi• znaki specjalne (posiadajˆce specjalne znaczenie - tzw. metaznaki). Znaki specjalne rozpoznawane przez program grep: ^ $ . * [ ] [-] \
- poczˆtek linii, - koniec linii, - jeden dowolny znak, - dowolna liczba wystˆpieÄ poprzedzajˆcego wyraýenia, - jeden dowolny znak z listy zawartej wewnˆtrz nawias—w, - jeden dowolny znak z zakresu podanego wewnˆtrz nawias—w, - przywraca pierwotne znaczenie nast«pnego znaku.
Jeæli wyraýenie opisujˆce wzorzec zawiera takie znaki, powinno zosta• umieszczone wÊapostrofach ÔwzorzecÔ, w celu zapobieýenia interpretacji przez pow¸ok«Êshell. 1.3 Opcje. Najcz«æciej stosowane opcje: -c -n -v
- podaje tylko liczb« dopasowanych linii, - dopisuje numer przed kaýdˆ dopasowanˆ liniˆ, - wypisuje tylko te linie, kt—re nie pasujˆ do wzorca.
-1-
2. Edytor strumieniowy
sed.
Program s¸uýy do edycji strumieni danych. Znajduje zastosowanie przy tworzeniu filtr—w do przetwarzania wsadowego, przy edycji duýych plik—w, kt—re nie mieszczˆ si« w buforze, przy przetwarzaniu potokowym oraz w skryptach shellowych. 2.1 Sk¸adnia. Wywo¸anie programu sed moýe przybra• jednˆ z nast«pujˆcych postaci: sed [-n] ÔprogramÕ [plik ... ] sed [-n] -e ÔprogramÕ [-e ÔprogramÕ] ... [-f plik_z_programem] ... [plik... ] sed [-n] -f plik-z-programem [-f plik_z_programem]... [-e ÔprogramÕ] ... [plik ... ] gdzie: program -e ÔprogramÕ
- program opisujˆcy operacje edycyjne - pobranie programu z linii polecenia, znaki ÔÊÔ zabezpieczajˆ przed interpretacjˆ element—w programu przez pow¸ok« shell -f plik_z_programem - pobranie programu z pliku plik-z-programem plik - plik wejæciowy -n - przesy¸a na wyjæcie tylko wskazane w programie linie
Program musi by• wywo¸any przynajmniej z jednˆ opcjˆ -e lub -f, przy czym pojedyÄczˆ opcj« -e moýna pominˆ•, podajˆc jedynie program. 2.2 Opis dzia¸ania. Edytor sed przesy¸a strumieÄ wejæciowy oraz zawartoæ• plik—w wejæciowych do strumienia wyjæciowego, wykonujˆc operacje edycyjne kolejno na kaýdej linii, zgodnie z podanym programem. Program zawiera polecenia, poprzedzone adresami linii wejæciowych, do kt—rych powinny by• zastosowane. Edytor kolejno kopiuje jednˆ lini« do przestrzeni roboczej (do bufora roboczego) iÊstosuje do niej sekwencj« poleceÄ, kt—rych adresy wskazujˆ danˆ lini«. Nast«pnie przesy¸a lini« do strumienia wyjæciowego oraz czyæci bufor roboczy. Niekt—re polecenia wykorzystujˆ bufor pomocniczy do zapami«tywania fragment—w tekstu. 2.3 Sk¸adnia programu. Program dla edytora sed sk¸ada si« z linii zawierajˆcych adres oraz polecenie z argumentami lub zestaw poleceÄ. Kaýda linia moýe przyjˆ• jednˆ z nast«pujˆcych postaci: [adres] polecenie [argumenty] [adres] { lista poleceÄ } Polecenia wykonywane sˆ w kolejnoæci wyst«powania w programie. Kolejnoæ• t« moýna zmieni• poprzez wykonanie skoku do etykiety. Polecenie moýe by• poprzedzone 1 lub 2 adresami. Polecenie z jednym adresem stosowane jest do linii wskazanych przez adres. Polecenie z dwoma adresami stosowane jest do zakresu ograniczonego liniami wskazanymi przez adresy. Polecenie bez adresu stosowane jest do kaýdej linii wejæciowej. -2-
2.4 Adresowanie. Adresowanie linii moýe odbywa• si« poprzez podanie numeru linii lub przez podanie jej kontekstu. Sk¸adnia adres—w jest nast«pujˆca: [nr1[, nr2]] [/wzorzec[/][, /wzorzec[/]]
- adres numeryczny - adres kontekstowy
2.4.1 Adresy numeryczne. Adresy numeryczne sˆ liczbami ca¸kowitymi dodatnimi. Program sed korzysta z w¸asnego licznika linii, kt—ry kumuluje ich liczb« dla wszystkich plik—w wejæciowych ¸ˆcznie. Znak $ identyfikuje ostatniˆ lini« w ostatnim pliku. 2.4.2 Adresy kontekstowe. Adresy kontekstowe majˆ posta• wzorca ograniczonego dwoma identycznymi znakami: /wzorzec/ lub \znak wzorzec znak Wzorzec jest dowolnym wyraýeniem, w kt—rym mogˆ wystˆpi• znaki specjalne. Edytor rozpoznaje nast«pujˆce znaki: ^ $ \n . * [ ] [ -] [^...]
- poczˆtek linii - koniec linii - znak nowej linii z wyjˆtkiem ostatniego znaku w buforze - jeden dowolny znak - dowolna liczba (r—wnieý 0) wystˆpieÄ poprzedzajˆcego wyraýenia - jeden dowolny znak z listy zawartej wewnˆtrz nawias—w - jeden dowolny znak z zakresu podanego wewnˆtrz nawias—w - jeden dowolny znak z wyjˆtkiem tych, podanych wewnˆtrz nawias—w oraz koÄczˆcego bufor znaku nowej linii \( \) - okreæla pole, do kt—rego moýna odwo¸a• si« poprzez numer \n - odwo¸anie do pola o numerze n (n = 0 - 9) \ - przywraca pierwotne znaczenie nast«pnego znaku 2.5 Podstawowe polecenia. 2.5.1 Polecenia edycyjne. [adres]d
Usuwanie wskazanych linii.
[adres]n
Wczytanie do przestrzeni roboczej kolejnej linii. Bieýˆca linia jest przesy¸ana na stdout.
[adres]a \RET tekst
Wstawianie podanego tekstu za wskazanˆ liniˆ.
[adres]i \RET tekst
Wstawianie podanego tekstu przed wskazanˆ liniˆ.
[adres]c \RET tekst
Wstawianie podanego tekstu zamiast wskazanych linii. -3-
[adres]s/wzorzec/tekst/flagi wzorzec tekst
flagi
Zamiana fragmentu linii, kt—ry pasuje do wzorca na podany tekst. Zamiast znak—w // mogˆ by• uýyte dowolne inne. Wyraýenie specjalne, kt—re moýe zawiera• znaki specjalne. Ciˆg znak—w, w kt—rym: & - string pasujˆcy do wzorca \d - podstring numer d pasujˆcy do fragmentu wzorca pomi«dzy znakami \( \) Opcje dla polecenia zamiany: n - zamienia n wystˆpieÄ, n = 1 - 512 g - zamienia globalnie wszystkie wystˆpienia wzorca p - przesy¸a lini« na wyjæcie, jeæli nastˆpi¸a zamiana w plik - przesy¸a lini« do pliku, jeæli nastˆpi¸a zamiana
2.5.2 Polecenia wejæcia / wyjæcia. [adres]p
Przes¸anie wskazanych linii na stdout.
[adres]=
Przes¸anie numer—w wskazanych linii na stdout.
[adres]w plik
Zapisanie wskazanych linii do pliku.
[adres]r plik
Wstawienie zawartoæci pliku za wskazanˆ liniˆ.
2.5.3 Polecenia sterujˆce. [adres]! funkcja
Zastosowanie podanej funkcji tylko do linii nie wybranych przez adres.
[adres]{ polecenia }
Grupowanie poleceÄ.
: etykieta
Ustawienie etykiety.
[adres]b etykieta
Skok do etykiety lub na koniec programu, gdy jej brak.
[adres]t etykieta
Skok do etykiety, jeæli nastˆpi¸y jakieæ zmiany w bieýˆcej linii.
#
Linia komentarza.
#n
Jeæli wyst«puje w pierwszej linii programu, wy¸ˆcza standardowe przesy¸anie na stdout.
[adres]q
Skok na koniec programu i zakoÄczenie jego dzia¸ania.
2.6 Przyk¸ady. Polecenie wyszukuje w pliku wejæciowym linie zaczynajˆce si« od dwukrotnego wystˆpienia dowolnego wzorca (rozdzielone spacjˆ): sed -n '/^\(.*\) \1/p' plik Polecenie wypisuje zawartoæ• pliku zamieniajˆc wystˆpienia wzorca tekst1 na wzorzec tekst2: sed 's/tekst1/tekst2/g' plik
-4-
3. Program awk. Awk jest j«zykiem programowania przeznaczonym do przetwarzania tekst—w. Stosowany jest do generowania raport—w, wyszukiwania wzorc—w, filtrowania i formatowania danych do przes¸ania. 3.1 Sk¸adnia. awk [-Fseparator-pola] awk [-Fseparator-pola] gdzie: program -f plik_z_programem plik -Fseparator-pola [-v] zmienna=wartoæ•
'program' [[-v] zmienna=wartoæ•]... [plik]... -f plik_z_programem [[-v] zmienna=wartoæ•]... [plik] ... - program zawierajˆcy polecenia awk; znaki ÔÊÕ zapobiegajˆ interpretacji przez pow¸ok« shell - pobranie programu z pliku - plik wejæciowy zawierajˆcy tekst do przetworzenia - ustawienie znaku jako separatora pola w rekordzie - nadanie wartoæci zmiennej, kt—ra b«dzie dost«pna w g¸—wnym module programu; opcja -v udost«pnia zmiennˆ w module inicjujˆcym
3.2 Opis dzia¸ania. Awk przetwarza zawartoæ•Êstrumienia wejæciowego lub kolejnych plik—w wejæciowych zgodnie z podanym programem. Program zawiera wzorce oraz zwiˆzane z nimi akcje, kt—re naleýy wykona• na danych wejæciowych pasujˆcych do wzorc—w. Zawartoæ• kaýdego pliku wejæciowego jest przeglˆdana jednokrotnie. 3.2.1 Tryby wywo¸ania. Polecenie awk moýe by• wywo¸ane na trzy r—ýne sposoby: - wywo¸anie awk wraz z programem w linii polecenia, - wywo¸anie awk w linii polecenia, program umieszczony w pliku, - wywo¸anie awk wraz z programem umieszczone w skrypcie shella. Pierwszy spos—b stosuje si« w przypadku kr—tkich program—w (jedna lub dwie linie), kt—re nie b«dˆ cz«sto wykorzystywane. Programy d¸uýsze lub przeznaczone do cz«stego uýytkowania umieszcza si« na og—¸ w pliku. Najcz«æciej stosowany jest trzeci spos—b. 3.2.2 Spos—b przetwarzania. Dane wejæciowe dzielone sˆ na rekordy zgodnie z wyst«powaniem separator—w rekordu. Standardowo jest to znak nowej linii ale moýna zmieni• to ustawienie, przypisujˆc inne znaki zmiennej RS. Awk wczytuje kolejno po jednym rekordzie do przestrzeni roboczej i dokonuje podzia¸u na pola zgodnie z rozmieszczeniem separator—w pola. Zazwyczaj sˆ to znaki spacji i tabulacji - ustawione w zmiennej FS. Do poszczeg—lnych p—l moýna si« odwo¸ywa• poprzez nast«pujˆce zmienne: $0 $1, $2 ... $NF
- ca¸y bieýˆcy rekord - kolejne pola bieýˆcego rekordu - ostatnie pole bieýˆcego rekordu -5-
Dodatkowo zdefiniowane sˆ: NF NR FNR
- liczba p—l bieýˆcego rekordu - liczba dotychczas wczytanych rekord—w - liczba rekord—w wczytanych z bieýˆcego pliku
Bieýˆcy rekord por—wnywany jest kolejno ze wszystkimi wzorcami w programie. W przypadku dopasowania wykonywane sˆ akcje zwiˆzane z danym wzorcem. Po wykonaniu ca¸ego programu nast«puje usuni«cie rekordu z przestrzeni roboczej i wczytanie nowego. 3.3 Sk¸adnia programu. Program dla awk jest sekwencjˆ instrukcji o nast«pujˆcej postaci: wzorzec { akcja } lub wzorzec { blok akcji } przy czym poszczeg—lne akcje w bloku mogˆ by• oddzielone ærednikiem lub znakiem nowej linii. Pomini«cie wzorca w instrukcji powoduje zastosowanie akcji do wszystkich rekord—w wejæciowych. Pomini«cie akcji powoduje przes¸anie wszystkich pasujˆcych rekord—w do strumienia wyjæciowego. W programie moýna r—wnieý umieæci• linie komentarza rozpoczynajˆce si« znakiem #. 3.4 Wzorce. Wzorzec okreæla, czy zwiˆzana z nim akcja ma zosta• zastosowana do bieýˆcego rekordu. WÊprogramie moýna stosowa• trzy typy wzorc—w: - wzorce specjalne BEGIN i END, - izolowane wyraýenia specjalne, - wyraýenia wartoæciowane jako prawda lub fa¸sz. 3.4.1 Wzorce specjalne. BEGIN { akcja } Akcja zwiˆzana ze wzorcem BEGIN wykonywana jest na poczˆtku, przed rozpocz«ciem przetwarzania danych wejæciowych. Daje to moýliwoæ• inicjalizacji zmiennych (np. separator—w rekordu RS i pola FS) lub wypisania nag¸—wk—w w raporcie. END { akcja } Akcja zwiˆzana ze wzorcem END wykonywana jest po zakoÄczeniu przetwarzania danych wejæciowych. Umoýliwia umieszczenie podsumowania w raporcie. 3.4.2 Izolowane wyraýenia specjalne. /wzorzec/ { akcja } Wzorzec moýe mie• posta• izolowanego wyraýenia ze znakami specjalnymi, umieszczonego pomi«dzy znakami //. Polecenie awk przyjmuje nast«pujˆcy zestaw znak—w specjalnych: ^ $ \n .
- poczˆtek linii - koniec linii - znak nowej linii z wyjˆtkiem ostatniego znaku w buforze - jeden dowolny znak -6-
* + ? | [ ] [ -] [^...] \
- zero lub wi«cej wystˆpieÄ poprzedzajˆcego wyraýenia - jedno lub wi«cej wystˆpieÄ poprzedzajˆcego wyraýenia - zero lub jedno wystˆpienie poprzedzajˆcego wyraýenia - jeden znak z pary - jeden dowolny znak z listy zawartej wewnˆtrz nawias—w - jeden dowolny znak z zakresu podanego wewnˆtrz nawias—w - jeden dowolny znak z wyjˆtkiem tych, podanych wewnˆtrz nawias—w oraz koÄczˆcego bufor znaku nowej linii - przywraca pierwotne znaczenie nast«pnego znaku
3.4.3 Dowolne wyraýenia. W og—lnym przypadku wzorzec przyjmuje posta• dowolnego wyraýenia, kt—remu moýna przypisa• wartoæ• logicznˆ prawda lub fa¸sz. Wyraýenie moýe zawiera• znaki specjalne oraz dowolne operatory . Najcz«æciej stosowane sˆ operatory dopasowania wzorc—w np.: string ~ /wzorzec/ { akcja } oraz operatory relacji np.: string1 == string2 { akcja }
lub
string !~ /wzorzec/ { akcja }
lub
liczba1 > liczba2 { akcja }
Pe¸nˆ list« operator—w podano w p. 3.5.4. 3.5 Akcje. Blok akcji ma posta• sekwencji poleceÄ wejæciowych i wyjæciowych, poleceÄ sterujacych oraz operacji przypisania wartoæci zmiennym. 3.5.1 Polecenia sterujˆce. W sk¸adni awk dost«pne sˆ nast«pujˆce polecenia i p«tle sterujˆce: if (warunek) { blok1 } [ else { blok2 } ] while (warunek) {blok} for (wyraýenie; wyraýenie; wyraýenie) { blok } for (zmienna in tablica) { blok } break - przerywa bieýˆcy obieg p«tli i rozpoczyna nast«pny continue - przerywa bieýˆcy obieg p«tli i rozpoczyna go od poczˆtku next - przerywa wykonywanie programu dla bieýˆcego rekordu, wczytuje nowy rekord i rozpoczyna przetwarzanie od poczˆtku programu, exit - przerywa wykonywanie programu 3.5.2 Funkcje wejæciowe i wyjæciowe. print [wyraýenie][[,] wyraýenie]... -Êwypisuje kolejne wyraýenia rozdzielone wyjæciowym separatorem pola podanym w zmiennej OFS; na koÄcu umieszczany jest wyjæciowy separator rekordu pami«tany w zmiennej ORS printf (format, wyraýenie [, wyraýenie] ...) - formatuje i wypisuje wyraýenie (sk¸adnia jak w j«zyku C) Wyjæcie obydwu funkcji moýna przekierunkowa• do pliku. -7-
getline
- wczytuje kolejny rekord z bieýˆcego pliku wejæciowego do przestrzeni roboczej
getline zmienna
- wczytuje kolejny rekord z bieýˆcego pliku wejæciowego do zmiennej, nie zmieniajˆc zawartoæci przestrzeni roboczej
getline < plik
- wczytuje rekord z podanego pliku do przestrzeni roboczej
getline zmienna < plik
- wczytuje rekord z podanego pliku do zmiennej, nie zmieniajˆc zawartoæci przestrzeni roboczej
system (polecenie shella) - przekazuje polecenie do wykonania w shellu; strumieÄ wyjæciowy polecenia jest w¸ˆczany w strumieÄ wyjæciowy awk 3.6 Struktury danych. W sk¸adni awk dost«pne sˆ zmienne skalarne, tablicowe jednowymiarowe oraz sta¸e numeryczne i stringowe. Sta¸e stringowe majˆ posta• dowolnego stringu obj«tego znakami ÒÊÓ. Wartoæ• zmiennej moýe by• interpretowana jako string lub wartoæ•Ênumeryczna. Wszystkie zmienne sˆ inicjalizowane stringiem zerowym (wartoæ• numeryczna 0). Operacja przypisania wartoæci zmiennej ma og—lnˆ posta•: zmienna operator wyraýenie List« dost«pnych operator—w zamieszczono w p. 3.7. W przypadku tablic nie deklaruje si« ich rozmiaru ani typu element—w. Nowe elementy pojawiajˆ si« wÊmomencie pierwszego przypisania wartoæci. Indeksy tablicy mogˆ by• dowolnymi stringami (wÊszczeg—lnoæci kolejnymi liczbami ca¸kowitymi). 3.7 Wyraýenia. Wyraýenia wyst«pujˆ zar—wno we wzorcach jak i w akcjach. Mogˆ zawiera• odwo¸ania do sta¸ych, zmiennych i do p—l rekord—w, wywo¸ania funkcji oraz dowolne operatory spoær—d wymienionych poniýej: - operatory arytmetyczne: - operatoty przypisania: - operatory relacji: - operatory logiczne: - operatory dopasowania wzorc—w:
+, =, <, || , ~,
- , * , / , % , (...) , ^ += , -= , *= , /= , %= , ++ , -<= , == , != , > , >= && , ! , ?: !~
3.7.1 Funkcje stringowe. index (s1, s2)
- zwraca indeks pierwszego wystˆpienia stringu s2 w stringu s1 lub 0, jeæli dopasowanie nie nast«puje
length (string)
- zwraca d¸ugoæ• stringu
match (string, wzorzec)
- zwraca indeks pierwszego wystˆpienia wzorca w stringu lub 0, jeæli dopasowanie nie nast«puje
split (string, tablica, separator)
- dzieli string na pola (rozdzielone separatorami) oraz przypisuje kolejnym elementom tablicy; funkcja zwraca liczb« p—l -8-
substr (string, pozycja, d¸ugoæ•) - zwraca podstring o podanej d¸ugoæci, rozpoczynajˆcy si« od wskazanej pozycji sprintf (format, wyraýenie [, wyraýenie]...)
- formatuje wyraýenie i zwraca w postaci stringu
sub(wzorzec, nowy_podstring [, string])
- zamienia pierwsze wystˆpienie wzorca w danym stringu na nowy podstring
gsub(wzorzec, nowy_podstring [, string])
- zamienia wszystkie wystˆpienia wzorca w danym stringu na nowy podstring
3.7.2 Funkcje numeryczne. atan2 (y,x)
- arcus tangens y/x w radianach w zakresie < -p, p >
cos (rad) exp (x) int (x) log (x) rand () srand ([seed]) sin (rad) sqrt (x)
- cosinus kˆta rad - funkcja ex - cz«æ• ca¸kowita x - logarytm naturalny z x - generator liczb pseudolosowych z przedzia¸u < 0, 1 > - inicjuje generator liczb pseudolosowych - sinus kˆta rad - pierwiastek kwadratowy z x
3.7.3 Funkcje definiowane przez uýytkownika. Uýytkownik ma moýliwoæ• zdefiniowania w¸asnych funkcji zgodnie z nast«pujˆcˆ sk¸adniˆ: function nazwa (arg... ) { cia¸o funkcji } Wewnˆtrz definicji moýna skorzysta• z funkcji: return (wyraýenie) kt—ra zwraca wartoæ• podanego wyraýenia. 3.8 Wsp—¸praca z shellem. W przypadku podania treæci programu w wywo¸aniu polecenia awk, program umieszcza si« w znakach ÔÊÕ. Zapobiega to interpretacji znak—w specjalnych awk przez pow¸ok« shell. W niekt—rych przypadkach dopuszczenie do takiej interpretacji staje si« konieczne, np. w celu udost«pnienia argument—w wywo¸ania skryptu w programie awk. Dokonuje si« tego poprzez ograniczenie fragmentu programu, przeznaczonego do interpretacji, znakami ÔÊÕ. Program zostaje w ten spos—b Òrozci«tyÓ na dwie cz«æci zabezpieczone znakami ÔÊÕ oraz wskazany fragment pomi«dzy nimi. Poniýszy przyk¸ad ilustruje spos—b pobrania wartoæci pierwszego argumentu wywo¸ania skryptu: awk
Ô ... Õ$1Õ ... Ô
Innˆ metodˆ jest rezygnacja z umieszczania ca¸ego programu pomi«dzy znakami ÔÊÕ iÊzabezpieczanie jedynie wybranych fragment—w. Moýe to by• jednak bardziej pracoch¸onne. -9-
3.9 Przyk¸ady. Polecenie wypisuje procesy uýytkownika lab1 podajˆc PID oraz nazw« polecenia: ps -ef | awk ' BEGIN {print "Procesy uzytkownika lab1"} $1 ~ /lab1$/ {print $2, $8} END {print "Koniec"} ' Polecenie wypisuje zawartoæ• pliku zamieniajˆc wystˆpienia wzorca tekst1 na wzorzec tekst2: awk '{gsub("tekst1", "tekst2", $0); print $0}' plik awk '{gsub("tekst1", "tekst2"); print}' plik
- 10 -