Ró˙zne po˙zyteczne polecenia oraz wyra˙zenia regularne

Transkrypt

Ró˙zne po˙zyteczne polecenia oraz wyra˙zenia regularne
Różne pożyteczne polecenia oraz wyrażenia regularne
Kurs systemu Unix
1
O pracach (jobs)
• Praca˛ nazwiemy proces b˛edacy
˛ pod kontrola˛ powłoki. Przykład:
% sort addresses > mail_list &
[1] 21885
%
• [1] oznacza numer pracy, przypisany przez aktualna˛ powłok˛e
• Obecnie aktywne prac˛e możemy wyświetlić za pomoca˛ polecenia
jobs.
• Każda z prac znajduje może być wykonywana (running) lub
zatrzymana stopped,
• dodatkowo może dojść znak + (aktualna praca) oraz - oznaczajacy
˛
prac˛e poprzednia.˛
Kurs systemu Unix
2
Sterowanie pracami
• Do prac odwołujemy si˛e piszac
˛ %numer-pracy, domyślnie polecenia
używaja˛ pracy bieżacej.
˛
• Możliwe polecenia:
– bg przenosi do tła,
– fg przenosi z tła na pierwszy plan,
– bieżac
˛ a˛ prac˛e możemy przenieść do tła za pomoca˛ ^Z)
Kurs systemu Unix
3
Polecenie find
• Rozbudowane polecenie służace
˛ do znajdywania plików oraz do
wykonywania na nich pewnych operacji.
• Składnia: find lista-kartotek wyra»enia.
• Rekurencyjnie przeglada
˛ każda˛ kartotek˛e z listy kartotek
• Kryteria oddzielone spacja˛ traktowane sa˛ jako połaczone
˛
spójnikiem
AND, spójnik OR osiagamy
˛
opcja˛ -o. Negacja zapisywana jest za
pomoca˛ !.
Kurs systemu Unix
4
Uwagi o składni
• Można stosować nawiasy, ale poprzedzone ukośnikiem, czyli \( oraz
\).
• Każdy element wyrażenia jest osobnym argumentem i musi być od
innych oddzielony spacja.˛
• Argumenty liczbowe wyst˛epuja˛ w jednej z trzech postaci: +n, -n lub
n oznaczajace,
˛ odpowiednio wiecej niż, mniej niż lub dokładnie n.
Kurs systemu Unix
5
Możliwości polecenia find
• -name nazwa-pliku – pasuje do plików o nazwie zgodnej z
nazw¡-pliku. Możliwe znaki specjalne, ale uwaga: trzeba zabronić
powłoce rozwijania (za pomoca˛ cudzysłowów).
• -type typpliku – gdzie, typ pliku to jedna z poniższych literek:
d
kartoteka
f
zwykły plik
p
fifo (nazwany potok)
l
łacze
˛
s
gniazdo
• -user login – pasuje, gdy login jest właścicielem pliku
• -group gr – podobnie
Kurs systemu Unix
6
• -size +/-n[c] – jeżeli rozmiar pliku jest wyspecyfikowany przez n
bloków, lub (c) znaków.
• -atime +/-n, -mtime +/-n – pozwala znajdywać pliki do
których był niedawno dost˛ep oraz te, które były niedawno
modyfikowane (czas wyrażamy w dniach), -atime -2 oznacza pliki,
do których był dost˛ep najpóźniej przedwczoraj.
• -newer filename – pasuje do plików nowszych niż filename
• -print – zawsze pasuje, drukuje ścieżk˛e.
• -ls – podobnie, ale wi˛ecej informacji (jak ls -l)
•
-exec command \; – na końcu listy warunków, wykonuje
polecenie dla plików, które pasuja.˛ W poleceniu {} oznacza nazw˛e
aktualnie przegladanego
˛
pliku.
•
-ok command \; – podobnie, ale zawsze wyświetla polecenie i
Kurs systemu Unix
7
grzecznie pyta.
Kurs systemu Unix
8
Przykład
• find czyszczacy
˛ dysk
find . \( -name core -o -name junk \)
-print -exec rm {} \;
Kurs systemu Unix
9
Wyrażenia regularne
• Wyrażenie regularne to opis pewnego zbioru ciagów
˛
znaków.
• Skojarzenia z j˛ezykami formalnymi, gramatykami lewostronnymi,
analiza˛ leksykalna,˛ automatami skończonymi sa˛ jak najbardziej
uzasadnione.
• Składnia ulega pewnym wariacjom, ale można wyodr˛ebnić dwie
klasy:
a) uproszczone
b) pełne
• O uproszczonych to już było (np. [Cc]hap*.[1-5]?[^0-9])
Kurs systemu Unix
10
Pełne wyrażenia regularne (1)
• Najprostsze wr to pojedynczy znak. Opisuje ono ten właśnie znak.
• . opisuje dowolny znak, czyli w.n. pasuje do wino lub win3.
Umieszczajac
˛ dwa wr obok siebie wyrażamy ich konkatenacj˛e.
• * oznacza 0 lub wi˛ecej wystapień
˛
poprzedzajacego
˛
ja˛ znaku (lub wr
w nawiasie)
• Alternatyw˛e wyrażeń opisuje si˛e za pomoca˛ |, czyli np.
^(From|Subject) pasuje do poczatku
˛ pliku z listem.
Kurs systemu Unix
11
Pełne wyrażenia regularne (2)
• ^ pasuje do poczatku
˛ linii
• $ pasuje do końca linii (przykładowo ^$ pasuje do ...?)
• Tu również możemy definiować „znak z grupy”, czyli: [aeiou],
[1-9], [a-e1-9], [^A-Z].
• ^ e nawiasach [] oznacza negacj˛e (dopełnienie).
• Poczatek
˛ i koniec słowa to \< oraz \>. Np. wzorzec br pasuje do
słów bra¢ i babra¢, natomiast wzorzec \<br tylko do tego
pierwszego.
Kurs systemu Unix
12
Pełne wyrażenia regularne (3)
• ? oznacza, że poprzedzajacy
˛ go fragment może (lecz nie musi)
wystapić.
˛
• + ma znaczenie podobne jak gwiazdka, ale wystapień
˛
jest 1 lub
wi˛ecej.
• Liczby wystapień
˛
można wyrażać również za pomoca˛ poniższych
specyfikacji:
a) \{n,m\} co najmniej n wystapień,
˛
ale nie wi˛ecej niż m
b) \{n\} dokładnie n wystapień
˛
c) \{n,} co najmniej n wystapień
˛
• Specyfikacj˛e t˛e piszemy po wr, mniej wi˛ecej jak ?, czy +.
Kurs systemu Unix
13
Wyrażenia regularne (4)
• Wyrażenia regularne pozwalaja˛ określać bardzo bogate j˛ezyki
(niekoniecznie regularne), dzi˛eki notacji \n, oznaczajacej
˛ fragment
dopasowany do n-tego nawiasu (liczac
˛ znaki '(' od lewej).
Kurs systemu Unix
14
Przykłady
• Podwojone słowo:
\<([A-Za-z]+) +\1\>
• Zmienna w C:
[a-zA-Z_][a-zA-Z_0-9]*
• Kwota w dolarach (i centach):
\$[0-9]+(\.[0-9][0-9])?
• Czas:
(1[012]|[1-9]):[0-5][0-9] (am|pm)
Kurs systemu Unix
15
Kurs systemu Unix
16
Wyrażenia regularne – gdzie je możemy znaleźć
• W edytorach tekstu (np w vi), wywoływane za pomoca˛ :/wzorzec.
• W programach przegladaj
˛ acych
˛
pliki (np. more czy less).
• W poleceniach grep, egrep, ...
• We „wsadowym edytorze” sed.
• W j˛ezykach programowania: awk, perl, tcl, python i wielu innych.
Kurs systemu Unix
17
Programy grep oraz egrep
• Służa˛ do wypisywania linii pasujacych
˛
do wzorca pobranych z
różnych plików.
• Podstawowe wywołanie to np. grep [opcje] wzorzec pliki.
• Używane sa˛ uproszczone wyrażenia regularne (grep), albo pełne
(rozszerzone), w przypadku egrep oraz grep -E.
• Jeżeli użyjemy opcji -r, to w poszukiwaniach rekurencyjnie
wchodzimy do kartotek.
• Opcja -v neguje dopasowanie: wypisujemy te, które nie pasuja.˛
• Opcj˛e -c stosujemy, gdy chcemy jedynie policzyć pasujace
˛
(niepasujace)
˛ linie.
Kurs systemu Unix
18
Program SED
• Nazw˛e tłumaczymy: SED: Stream oriented, NonInteractive, Text
Editor.
• Można stosować do automatycznego wykonywania prostych operacji
edycyjnych.
• Najbardziej przydaje si˛e do wykonywania „regularnych” podstawień
w całym pliku.
Kurs systemu Unix
19
Użycie SEDa
• sed 'lista komend edycyjnych' nazwy plików
• sed czyta linie z pliku i nast˛epnie stosuje do niej wszystkie komendy
edycyjne ...
• a wynik zapisuje na standardowym wyjściu.
• Jeżeli komendy sa˛ długie można je umieścić w pliku i skorzystać z
opcji: -f nazwa-tego-pliku.
Kurs systemu Unix
20
Ogólna postać polecenia edycyjnego
• [adres1, adres2] [funkcja] [argumenty]
• Za pomoca˛ adresów wybieramy linie:
1. podajac
˛ jej numery (dziesi˛etnie)
2. używajac
˛ wyrażeń regularnych
Kurs systemu Unix
21
Adresowanie
• Sposoby adresowania:
brak adresu
każda linia
1 adres
każda linia pasujaca
˛ do adresu
2 adresy (,)
linie mi˛edzy linia˛ pasujac
˛ a˛ do 1-go a pasujac
˛ a˛ do 2-go
adres z !
linie nie pasujace
˛ do adresu.
• Przy dwuadresowym trybie linie pasujace
˛ do ograniczeń sa rownież
uwzgl˛edniane.
Kurs systemu Unix
22
Proste przykłady
• Polecenie d oznacza pomini˛eci˛e wskazanej linii.
• head -1 — sed '1!d'
• tail -1 — sed '$!d'
• grep <wzorec> — sed '/wzorzec/!d'
• Wykrzyknik oznacza negacj˛e.
Kurs systemu Unix
23
Przykłady nieco bardziej zaawansowane
• 6d – usuwa szósta˛ lini˛e,
• /^$/d – usuwa puste linie,
• 1,10d – usuwa linie od 1 do 10,
• 1,/^$/d – usuwa linie od poczatku
˛ pliku do pierwszej pustej,
• /^$/,$d – usuwa linie od pierwszej pustej do końca
• Zagadka:
Co robi polecenie /^$/,/$/d?
Kurs systemu Unix
24
Podstawianie
• Najbardziej użyteczne jest podstawianie, czyli polecenie s.
• Składnia komendy: s/<co>/<czym>/<opcje>
• g zast˛epuje wszystkie instancje, nie jedynie pierwsza˛
• Użycie: s/ala/ola/g
• Uwaga: w wyrażeniach regularnych w sed nawiasy piszemy jako \(
oraz \).
Kurs systemu Unix
25
Czym zastepujemy
• Ciagiem
˛
znaków (może on zawierac znaki specjalne):
a) & - oznacza cały dopasowany napis.
b) /d - oznacza to, co dopasowalo si˛e do nawiasu d, przykładowo /3
Kurs systemu Unix
26
Przykłady
• Afirmacja liczb:
sed 's/[0-9][0-9]*/& (naprawde &!)/g'
• Zamiana dwóch kolumn:
sed 's/\(.*\):\(.*\)/\2:\1/'
Przekształca:
ala:kota
jola:psa
jurek:chomika
Kurs systemu Unix
=>
kota:ala
psa:jola
chomika:jurek
27
• A co dla: ala:ma:kota?
Kurs systemu Unix
28
AWK: pierwsza odsłona!
• AWK jest j˛ezykiem programowania (b˛edzie mu poświ˛econy nast˛epny
wykład).
• Można go jednak traktować jako proste połaczenie
˛
funkcjonalności
nast˛epujacych
˛
programów:
– grep, do wybierania interesujacych
˛
linii,
– cut, do wybierania interesujacych
˛
kolumn,
– tr -s [:blank:], ponieważ domyślnym separatorem jest ciag
˛
spacji i tabulacji.
Kurs systemu Unix
29
Program w awk
• Podstawowy program:
/wzorzec1/{akcja1}
/wzorzec2/{akcja2}
/wzorzec3/{akcja3}
• Dla każdej linijki, jeżeli pasuje ona do wzorca to wykonana jest
odpowiednia akcja.
• Najprostszy wzorzec to tekst. Pasowanie oznacza wówczas
„wyst˛epowanie”
• Najprostsza akcja to print. Oznacza ona wypisanie całej linii.
Kurs systemu Unix
30
Dost˛ep do pól
• Zmienna $1 to pierwsze pole, $2 drugie itd. Cała bieżaca
˛ linia to $0.
• Przykład: wybranie z pliku dwóch kolumn i zamiana miejscami.
awk '{print $3,$2 }'
• powyżej jako filtr, inna możliwość to
awk -f program.awk dane_we1 dane_we2 > dane_wy
Kurs systemu Unix
31
Składnia wyrażeń regularnych
^
poczatek
˛ pola
$
koniec pola
.
1 dowolny znak
|
alternatywa wzorców
*
0 lub wi˛ecej wystapień
˛
tego co przed
+
1 lub wi˛ecej wystapień
˛
tego co przed
?
0 lub 1 powtórzenie tewgo co przed
[ ]
[^abcd]
()
Kurs systemu Unix
znak z zestawu ([abcd])
znak spoza zestawu
nawiasy grupuja˛ podwyrażenia
32
Wyrażenia regularne
• Przykład: program wyświetlajacy
˛ te linie, które sa˛ liczbami
/^[0-9]+(\.[0-9]+)?$/ { print $0 }
• W ten sposób uzyskujemy funkcjonalność programu grep.
Kurs systemu Unix
33