1. [2p] Napisz instrukcję pętli shella, która zamieni nazwy wszystkich plików w katalogu bieżącym mających w nazwie spacje na podkreślenia. Sekwencje kilku spacji powinny być zamienione na pojedynczy znak podkreślenia.

    Napisz dwie wersje takiej instrukcji wykorzystujące do skonstruowania nowych nazw plików alternatywnie tr i seda.

    Opracowane polecenia wklej do raportu z wykonania zadania.

  2. [2p] Wykorzystując program tr napisz polecenie zamieniające wszystkie wielkie litery na małe, a znaki nie będące znakami alfanumerycznymi na znaki podkreślenia. Użyj POSIX-owych klas znaków, aby uzyskać prawidłową zamianę dla polskich liter włącznie z ż, ź, Ż, Ź, itp. Uwaga: można napisać dwa oddzielne wywołania tr-a w potoku.

    Opracowane polecenie wklej do raportu.

  3. [2p] Używając polecenia grep sprawdź, jakie litery dopasowywane są do wyrażenia regularnego [a-e] jeśli bieżące locale ustawione jest na POSIX, a jakie w przypadku pl_PL. Jakie litery są dopasowywane do wzorca [a-E]? Wyniki swoich eksperymentów zweryfikuj czytając man-a.

    W raporcie podsumuj uzyskane wyniki.

  4. [2p] W wyszukiwarce Google wpisz jakieś hasło, uzyskaj dużo wyników. Klikając prawym klawiszem na znaleziony link, zapamiętaj jego adres. Normalnie Google raportuje linki opakowane w swoje dodatkowe dane. Wpisz do pliku szereg takich zapamiętanych linków z Google'a (minimum 10), po jednym w wierszu.

    Napisz wyrażenie seda, który wyłuska z linku przekazanego przez Google'a właściwy link docelowego dokumentu, oraz przekonwertuje zakodowane szesnastkowo znaki specjalne z powrotem na właściwe znaki. Przepuść zapamiętane linki przez swój skrypt seda i sprawdź, że otrzymane linki są poprawne i można za ich pomocą otworzyć docelowe dokumenty w przeglądarce. Zwróć uwagę na znaki specjalne w linkach: spacje, wykrzykniki, apostrofy, itp.

    W raporcie wklej zarówno opracowane wyrażenie seda jak i przekonwertowane linki.

  5. [2p] Plik zawiera listę studentów w postaci:

    Imię/Imiona Nazwisko Numer
    na przykład:

    Jan Kos 111111
    Jola Wiola 222222
    Jan Maria Boruta 333333
    

    Wszystkie pola są oddzielone spacjami. Imiona i nazwiska zawierają tylko litery (małe i wielkie), natomiast numer indeksu jest ciągiem cyfr. Problem w tym, że niektórzy studenci mają jedno imię, a niektórzy dwa imiona.

    Napisz skrypt seda zamieniający listę w powyższym formacie na listę CSV, to znaczy separatorami pól mają być przecinki zamiast spacji. Jednak spacje powinny pozostać pomiędzy imionami, gdy są dwa.

    Napisz skrypt seda jako plik wykonywalny, wykorzystując mechanizm #!. To znaczy, skrypt powinien zawierać tylko polecenia seda, aby można go było wywołać w postaci sed -f skrypt.sed, ale również dzięki mechanizmowi #! aby możliwe było wywołanie ./skrypt.sed.

    Po napisaniu i uruchomieniu skryptu zastanów się, czy jest on możliwie prosty, a jednocześnie niezawodny. Na przykład, odpowiedz, czy zadziała on równie poprawnie jeśli: imion będzie więcej niż dwa, po numerze studenta w wierszu wystąpią jeszcze inne informacje? Nie jest wymagane, aby skrypt poprawnie zadziałał w tych przypadkach, jednak sprawdź to.

    Do raportu wklej opracowane wyrażenie seda i odpowiedzi na pytania.

  6. [2p] Napisz instrukcję przypisania shella, które wywołując seda jako polecenie zagnieżdżone zmodyfikuje bieżące ustawienie ścieżki PATH w taki sposób, aby usunąć z niej katalogi "/usr/games" i "."

    To znaczy, jeśli przykładowo wartość PATH wynosiła:

    PATH=/usr/bin:/bin:/usr/games:.
    
    to wynikiem wykonania instrukcji powinno być:
    PATH=/usr/bin:/bin
    

    Opracowaną instrukcję przetestuj w różnych przypadkach. Sprawdź czy działa poprawnie niezależnie od tego, czy dowolny z podanych katalogów znajdował się w ustawieniu ścieżki, czy nie. Oczywiście nie chcielibyśmy, aby po wykonaniu naszej instrukcji, w ścieżce pozostały dziwactwa takie jak: :: (aczkolwiek nie generują one błędów).

    Wariant trudniejszy: sprawdź czy Twoja instrukcja zadziała poprawnie niezależnie od tego, które z następujących form podanych katalogów znajdą się w ścieżce: "/usr/games" "/usr/games/" "." "./"
    Spróbuj napisać możliwie najkrótsze wyrażenie seda, które zadziała poprawnie w każdym przypadku.

    Opracowane polecenie wklej do raportu z wykonania zadania.

  7. [2p] Plik zawiera listę studentów z wynikami ćwiczeń w formacie:

    Imię_1 Nazwisko_1 Numer_1 wynik_1
    Imię_2 Nazwisko_2 Numer_2 wynik_2
    Imię_3 Nazwisko_3 Numer_3 wynik_3
    ...
    

    Może występować wiele wyników dla każdego studenta, jednak dany student ma zawsze ten sam numer. Napisz skrypt w awk-u obliczający i wyświetlający na wyjściu dla każdego studenta: imię, nazwisko, numer, liczbę znalezionych wyników, wynik sumaryczny, wynik średni, oraz wynik średni obliczony z pominięciem najniższego i najwyższego.

  8. [2p] Plik zawiera listę studentów w formacie:

    Imię_1 Nazwisko_1 Numer_1 inne informacje ...
    Imię_2 Nazwisko_2 Numer_2 inne informacje ...
    Imię_3 Nazwisko_3 Numer_3 inne informacje ...
    ...
    

    Napisz skrypt w awk-u sprawdzający, czy wszystkie wiersze zawierające ten sam numer w polu 3 mają dokładnie to samo imię i nazwisko w polach 1 i 2. Na wyjściu należy wyświetlić wszystkie wiersze z wejścia (bez zmian), oraz dodatkowy komunikat dla każdego wiersza, który zawiera numer, który wcześniej wystąpił z innym imieniem i/lub nazwiskiem.