Poniższe zadania powinny być rozwiązane przy użyciu narzędzi systemu Unix (Solaris - diablo). Jeśli nie potrafisz napisać rozwiązania poprawnego na Uniksie, i udało Ci się jedynie uruchomić swoje rozwiązanie pod Linuksem - zaznacz to w raporcie. Takie rozwiązanie będzie tolerowane, choć w niektórych przypadkach może być niżej ocenione.
Odśwież wiadomości o programie tr
. Aby lepiej poznać możliwości tego
programu, znajdź w necie zestaw najprostszych, podstawowych przykładów jego
użycia. Następnie przypomnij sobie sposób wywołania i działanie programu
sed
.
Zad.1. (1 punkt - na zajęciach)
Wykorzystując program tr
napisz skrypt zmien1
zamieniający duże litery
na małe w nazwie pliku w katalogu bieżącym, danej jako argument wywołania.
Na przykład, wywołanie zmien1 Plik_14.txt
powinno wykonać polecenie
mv Plik_14.txt plik_14.txt
UWAGA: aby testować skrypty/programy zmieniające coś w sposób trwały, np. pliki w katalogu, konieczne jest stworzenie podkatalogu testowego, i w nim zestawu plików roboczych do testów. Przy wielokrotnym testowaniu trzeba nawet napisać pomocniczy skrypt, tworzący od nowa takie pliki testowe. Bez dokładnego przetestowania nigdy nie ma pewności czy tworzony skrypt będzie poprawnie działał.
Do tworzenia plików tymczasowych służy katalog /tmp
w którym każdy
użytkownik może tworzyć pliki i katalogi. Warto utworzyć tam własny
katalog testowy, odciąć dostęp dla innych użytkowników, i tam ćwiczyć.
Zad.2. (1 punkt - na zajęciach)
Wykorzystując tr
napisz skrypt zmien2
, które zamieni wszystkie znaki
niealfanumeryczne na znaki podkreślenia w nazwie pliku w katalogu bieżącym,
danej jako argument wywołania.
WSKAZÓWKA: wykorzystaj opcję -c
(complement).
Zad.3. (2 punkty - na zajęciach, lub 1 punkt - w domu)
Napisz skrypt zmien3
, który dla wszystkich plików zadanych argumentami
wywołania, jeśli nazwa pliku kończy się na .txt
zamieni tę końcówkę na
_org.txt
, a jeśli nazwa pliku nie ma takiej końcówki to wyświetli
komunikat o tym na wyjściu.
Do wygenerowania zmienionej nazwy pliku należy wykorzystać program
sed
w poleceniu zagnieżdżonym.
Do sprawdzenia czy nazwa pliku ma wymaganą końcówkę należy wykorzystać
program expr
.
Zad.4. (1 punkt - w domu)
Napisz skrypt arch1
który dla wszystkich plików z katalogu bieżącego
o końcówce zadanej argumentem skryptu (np. .c
) wykorzystując program
sed
wykona ich kopie w katalogu $HOME/.arch
o nazwie z taką samą
końcówką, ale z uzupełnieniem _arch
do głównej części nazwy pliku.
To znaczy, dla każdego znalezionego pliku o nazwie typu prog1.c
skrypt
wykona:
cp -p prog1.c $HOME/.arch/prog1_arch.c
Zad.5. (1 punkt - w domu)
Zapoznaj się z programem basename
a następnie napisz skrypt arch2
działający tak samo jak arch1
tylko wykorzystujący basename
zamiast
sed
-a.
Zastanów się, czy oba rozwiązania we wszystkich przypadkach będą działać dokładnie tak samo? Odpowiedź podaj w raporcie.
Przykłady i tutoriale o tr
:
Przykłady i tutoriale o sed
:
Przykłady i tutoriale o expr
:
Raport z wykonanego zadania powinien zawierać listę punktów zadania z
adnotacją "WYKONANE", i ewentualnie, w razie potrzeby, z dodatkowymi
uwagami. Skrypty opracowane do punktów 3, 4, i 5 proszę dołączyć jako
oddzielne pliki o nazwach odpowiadających punktom zadania.
Zwróć uwagę, by skrypty nie zawierały odwołań do Twoich własnych katalogów,
a operowały np. tylko na katalogu bieżącym (ub zadanym w zadaniu). W razie
potrzeby utworzenia tymczasowego pliku roboczego, utwórz go w katalogu
/tmp