Technologia Informacyjna

Transkrypt

Technologia Informacyjna
Technologia Informacyjna
lista 1
Prowadzący: Mariusz Adamski
Słowa kluczowe: wyrażenia regularne (regexp), Vim, sed, skrypty powłoki (shell scripting), XML,
GPX
Celem tej listy jest nauczenie studentów rozwiązywania problemów przy pomocy skryptów powłoki
oraz wyrażeń regularnych. Podczas zajęć, każdy student napisze skrypt, który zmniejszy o rząd wielkości
właściwość <hdop> wszystkich punktów GPS, zawartych w plikach GPX, podanych jako argument.
1
Praca przy użyciu terminala (konsoli)
1. Uruchom terminal; w środowisku KDE możesz to zrobić stosując kombinację klawiszową <Alt-F2>
i wpisując “konsole<Enter>”.
2. Przejdź do katalogu domowego, wpisując “cd ∼<Enter>”, a następnie utwórz swój katalog roboczy
poprzez “mkdir nazwa<Enter>”. Wskazówka: Możesz zawsze dowiedzieć się co robi wybrana
komenda korzystając z podręcznika man, wpisując “man komenda”. Z podręcznika wychodzi się
klawiszem <q>.
3. Przejdź do swojego katalogu poleceniem “cd”, utwórz w nim katalog “lista1” i wejdź do niego.
4. Ściągnij ślady GPX poleceniem “wget http://ift.uni.wroc.pl/∼marad/stuff/tracks.tgz”.
Gdy wget zakończy pobieranie, sprawdź przy pomocy polecenia “ls”, że pojawił się nowy plik.
5. Rozpakuj go poleceniem “tar -xzf tracks.tgz”. Użyj automatycznego uzupełniania – wprowadź część nazwy pliku i wciśnij <Tab>. Sprawdź znaczenie poszczególnych przełączników w podręczniku (“man tar”) lub przy użyciu “tar --help”.
6. Skopiuj jeden z plików GPX do katalogu bieżącego: “cp tracks/1.gpx .”; będzie to kopia, na
której będziemy testować wyrażenia regularne. Zauważ, że separatorem katalogów jest “/”; pojedyncza kropka (“.”) oznacza katalog bieżący.
7. Wykonaj kopię zapasową całego katalogu ze śladami: “cp -r tracks tracks.bak”. Przełącznik
“-r” oznacza kopiowanie rekurencyjne, tzn. wraz z całą zawartością katalogu.
2
Vim
1. Uruchom w terminalu samouczek Vima wpisując “vimtutor<Enter>” (możesz użyć automatycznego uzupełniania; w tym celu wpisz tylko “vimt” i naciśnij <Tab>). Przerób co najmniej pierwsze
trzy lekcje oraz ppkt. 4.2, 4.4 i 6.4.
2. Otwórz plik do testowania wyrażeń regularnych: “vim 1.gpx”. Przejrzyj go i zapoznaj się z jego
strukturą. Do testowania wyrażeń regularnych posłuży nam polecenie substitute z lekcji 4.4
samouczka Vima.
1
3. Aby dopasować dowolną cyfrę, można użyć wyrażenia “[0-9]”; wypróbuj “:%s/[0-9]/c/gc”.
4. Aby zaznaczyć, że poprzedzające wyrażenie może wystąpić wielokrotnie (być może zero razy),
użyj “*”; np. “:%s/[0-9][0-9]*/liczba/gc”.
5. Niektóre znaki specjalne należy „escape’ować”, poprzedzając je znakiem “\”. Należą do nich m.in.
“\”, “/”, “.” („nieescape’owana” kropka oznacza dopasowanie dowolnego znaku). Spróbuj np.
“:%s/[0-9]*\.[0-9][0-9]*/liczba/gc”.
6. „Escape’owane” nawiasy (“\(” i “\)”) mogą zostać użyte do grupowania wzorców. Do grup tych
można się później odnosić przy pomocy “\1”, “\2”, itd. Spróbuj zamienić części dziesiętne z całkowitymi w liczbach, stosując “:%s/\([0-9]*\)\.\([0-9][0-9]*\)/\2.\1/gc”.
7. Korzystając z powyższych reguł, skonstruuj wyrażenie regularne przesuwające przecinek (a właściwie kropkę, będącą separatorem dziesiętnym w tym przypadku) w lewo we wszystkich liczbach
pomiędzy znacznikami <hdop> a </hdop>.
3
Sed
1. Do masowej konwersji posłuży nam program sed. Podstawowa składnia, której będziemy na razie
używać, to “sed -e ’regexp’ plik”, gdzie “plik” oznacza plik wejściowy, a “regexp”, to wyrażenie
regularne, które chcemy zastosować.
2. Wypróbuj seda z prostym wyrażeniem regularnym: “sed -e ’s/[0-9]/c/g’ 1.gpx”. Sed pracuje
linia po linii na całym pliku; zauważ, że nie musimy (i nie powinniśmy) podawać mu zakresu
w formie znaku “%”. Ponieważ nie pracuje on interaktywnie, flaga “c” na końcu również nie ma
sensu.
3. Teraz wypróbuj seda ze swoim wyrażeniem regularnym.
4. Jeśli wszystko jest w porządku, możesz przekierować wyjście seda do pliku przy pomocy operatora
“>” w taki sposób: “sed -e ’regexp’ plik > plik.out”.
4
Skrypt
1. Otwórz w Vimie plik fix.sh i przepisz następujący skrypt:
#!/bin/sh
echo "Witaj świecie!"
Ustaw mu flagę wykonywalności: “chmod +x fix.sh”; możesz go teraz wykonać: “./fix.sh”.
Magiczna linia rozpoczynająca się od “#!” („hash-bang” lub „crunch-bang”) informuje terminal
przy użyciu jakiego programu ma wykonać skrypt (u nas jest to “/bin/sh”, standardowa powłoka
systemowa).
2. Skryptowi można przekazać argumenty; wewnątrz niego odczytuje się je przy pomocy zmiennej
“$@”. Zmodyfikuj skrypt, aby wyświetlał tą zmienną i wypróbuj “./fix.sh tracks/*.gpx”.
3. Po zmiennej “$@” można iterować pętlą for w sposób następujący:
for i in "\$@"; do
# ciało pętli
done
2
Wewnątrz ciała pętli zmienna “$i” będzie przyjmować wartość kolejnych argumentów; zmodyfikuj
swój skrypt tak, aby je wypisywał.
4. Aby otrzymać nazwę pliku wynikowego, posłużymy się poleceniem “basename”. Składnia w postaci
“$(basename "$i" .gpx)” wywoła polecenie wewnątrz nawiasów i jego wynik potraktuje jako
zmienną. Spróbuj w ciele pętli umieścić linię “echo $(basename "$i" .gpx)”.
5. Powyższe informacje powinny być wystarczające, aby stworzyć skrypt, który przy pomocy seda
przesunie przecinek w wartościach <hdop> wszystkich plików podanych jako argumenty. Wskazówka: Jako pliku wyjściowego użyj formy “$(basename "$i" .gpx)-fixed.gpx”; w ten sposób,
np. poprawiony plik 1.gpx otrzyma nazwę 1-fixed.gpx.
6. Wywołaj “./fix.sh tracks/*.gpx” i zweryfikuj, czy działa poprawnie.
Wskazówki
1. Terminal, którego używamy, posiada historię poleceń. Użyj klawiszy strzałek <Góra> i <Dół>, aby
po niej nawigować. Możesz również używać <Lewo>, <Prawo> aby edytować polecenie, lub <Home>,
<End> aby umieścić kursor odpowiednio na początku lub końcu wprowadzanego polecenia.
2. Jeśli chcesz przejść do katalogu nadrzędnego, wpisz “cd ..”. Podwójna kropka (“..”) oznacza
właśnie katalog nadrzędny.
3. Z Vima wychodzi się wpisując “:q”, lub “:q!” jeśli chcesz wymusić wyjście porzucając wszystkie
zmiany. Upewnij się jednak, że jesteś w trybie normalnym; klawisz <Esc> wprowadza edytor w ten
tryb.
4. Vim posiada historię poleceń „dwukropkowych”; nawiguje się nią klawiszami strzałek <Góra>
i <Dół>, będąc w trybie poleceń. Klawisze <Lewo>, <Prawo>, <Home>, <End>, działają podobnie
jak w terminalu.
5. Możesz korzystać ze schowka na dwa sposoby:
• zaznaczając tekst myszą, a następnie klikając prawy przycisk myszy wybrać „kopiuj”/„wklej”
• zaznaczając tekst, co automatycznie umieści go w schowku X i wklejając środkowym przyciskiem myszy
są to dwa różne schowki.
3

Podobne dokumenty