- [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.
- [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.
- [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.
- [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.
- [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.
- [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.
- [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.
- [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.