. ? * + ^ | $ () [] {} \
$
.Polski kod pocztowy składa się z pięciu cyfr i myślnika wstawionego po drugiej cyfrze. Przy pomocy wyrażeń regularnych wzorzec kodu pocztowego może być zdefiniowany następująco:
W dużym lotku losowane są liczby od 1 do 49. Przy pomocy wyrażenia regularnego można sprawdzić czy dana liczba może być wylosowana w dużym lotku. Należy wyrażenia zdefiniować następująco:
Adres MAC jest 48-bitowym numerem karty sieciowej. Najczęściej zapisuje się go w postaci heksadecymalnej. Po każdych dwóch znakach może występować (ale nie musi) separator (najczęściej są to: dwukropek, myślnik, spacja). Przykładowy format adresu MAC to:
Wyrażenie regularne akceptujące powyższe zapisy może być zdefiniowane następująco:
Przeczytać manual do programu. Zwrócić uwagę na polecenia, ich składnię oraz sposób adresacji poleceń.
/etc/passwd
na spację./etc/passwd
/etc/passwd
/etc/passwd
./etc/passwd
opisujące osoby mające login zaczynający się na 'z'./etc/passwd
opisujące osoby mające login zaczynający się na 'w' lub 'z'.grep -v
? np. dla frazy 'lo' (grep -v lo /etc/networks
)root
na twój login (przetestuj na pliku /etc/aliases
)?/etc/networks
./etc/mime.types
zaczynające się od video
i wyświetl ich numer.cut -d: -f2
./etc/aliases
)? news: root
root: news
cat -n
./bin/tcsh
. Skrypt ma wydrukować całą zawartość zmienionego pliku na ekranie wraz z zaznaczeniem zmienionych linii - tak jak jest to przedstawione poniżej.---------------------------- linia w której nastąpiła zmiana powłoki ----------------------------
/etc/passwd
w odwrotnej kolejności.FS
, RS
, NF
, NR
, OFS
, ORS
?BEGIN
oraz END
w przypadku kiedy zródło danych składa się z wielu plików?
Zadanie1
Przeanalizować poniższy skrypt (plik userlist):
#!/bin/sh who | awk '{print $1}' | sort | uniq | xargs -i"{}" grep -e "^{}:" /etc/passwd | awk -f awkuserlist
oraz plik awkuserlist (skrypt programu awk) który jest w nim wykorzystany:
BEGIN { FS=":" print "<xml version="1.0">"; } { match($5, "^[^, ]*"); imie=substr($5, RSTART, RLENGTH); match($5, " [^, ]*"); nazwisko=substr($5, RSTART+1, RLENGTH-1); login=$1; uid=$3; gid=$4; home=$6; shell=$7; print "<osoba>"; print "<imie>"imie"</imie>"; print "<nazwisko>"nazwisko"</nazwisko>"; print "<login>"login"</login>"; print "<uid>"uid"</uid>"; print "<gid>"gid"</gid>"; print "<home>"home"</home>"; print "<shell>"shell"</shell>"; print "</osoba>"; } END { print "</xml>"; }
<osoba> <dana1>wartosc1</dana1> <dana2>wartosc2</dana2> <dana3>wartosc3</dana3> <dana4>wartosc4</dana4> </osoba>
------------------------------------------- dana1: wartosc1 dana2: wartosc2 dana3: wartosc3 dana4: wartosc4 -------------------------------------------
<osoba> <imie>Jan</imie> <nazwisko>Kowalski</nazwisko> <login>jkowalski</login> <uid>1</uid> <gid>1</gid> <home>/home/users/jkowalski</home> <shell>/bin/bash</shell> <miasto>Kraków</miasto> </osoba>
------------------------------------------- imie: Jan nazwisko: Kowalski login: jkowalski uid: 1 gid: 1 home: /home/users/jkowalski shell: /bin/bash miasto: Kraków -------------------------------------------
Zadanie 2
BibTeX to narzędzie służące do formatowania bibliografii.
Operuje ono na danych zawartych w plikach o rozszerzeniu „bib”
zawierających dane bibliograficzne.
Przykład pliku: publikacje.bib.txt.
Poszczególne wpisy bibliograficzne mają następującą postać:
@rodzaj{klucz, author = {wartość}, title = {wartość}, year = wartość, other = {wartość} }
Zadanie polega na stworzeniu skryptu bash
,
który przy użyciu awk
wybierze z pliku tylko te wpisy bibliograficzne,
które odpowiadają zapytaniu użytkownika.
Tzn. skrypt zapisany w pliku szukaj
powinien obsługiwać
następujące opcje (-a, -t, -k):
./szukaj -a Nalepa
- wyszuka wszystkie publikacje autorstwa Nalepy (te wpisy bibtexowe, w których polu author
występuje Nalepa
),./szukaj -t slowo
- wyszuka wszystkie publikacje zawierające w tytule ciąg slowo
,./szukaj -k slowo
- wyszuka wszystkie publikacje zawierające ciąg slowo
w dowolnym polu.
Zadanie 3
Napisz skrypt programu awk który policzy i wyświetli średnią ocen dla każdego studenta.
Lista studentów oraz ocen jest zapisana w pliku, którego nazwę podajemy jako parametr uruchomienia programu awk (nazwa pliku nie może być zakodowana wewnątrz skryptu).
Format pliku zawierającego listę studentów oraz ocen jest następujący:
login_1:ocena_1,ocena_2,ocena_3 login_2:ocena_1,ocena_2,ocena_3,ocena_4
Należy przyjąć następujące założenia:
login_n
- jest loginem danego studenta.login_n
- istnieje w pliku /etc/passwd
.ocena_n
- oznacza ocenę, liczbę ze zbioru {2.0, 3.0, 3.5, 4.0, 4.5, 5.0}
(nie ma przymusu sprawdzania poprawności - przyjmujemy że oceny są wpisane poprawnie).Jako rezultat, skrypt powinien wyświetlić informację o uzyskanej średniej ocenie przez każdego studenta w następującym formacie:
Srednia ocena dla Imie Nazwisko wynosi: X
gdzie:
Imie Nazwisko
- oznaczają odpowiednio imię i nazwisko studenta pobrane z pliku /etc/passwd
(uwaga: nie login jak to jest w pliku wejściowym).X
- wartość średniej oceny z dokładnością do dwóch miejsc po przecinku.
Napisany skrypt nie może używać żadnych poleceń zewnętrznych.
Przykłady plików: wejściowego oraz wyjściowego.