Autorem poniższego opracowania jest dr Piotr A. Dybczyński z Instytutu Obserwatorium Astronomiczne UAM w Poznaniu.
1. find
find - szuka plików w hierarchii katalogowej
SKŁADNIA
find [ścieżka...] [wyrażenie]
OPCJE
-maxdepth n zagłębiaj się na 'n' poziomów w strukturę katalogów
TESTY
Wartości numeryczne mogą być podawane jako +n dla większych niż n, -n dla mniejszych niż n, n dla równych n. -amin n Dostęp do pliku nastąpił ostatnio n minut temu. -anewer plik Do pliku ostatnio dostano się wcześniej niż plik został zmodyfikowany. -atime n Do pliku dostano się po raz ostatni n*24 godzin temu. -cmin n Status pliku został zmieniony n minut temu. -cnewer plik Status pliku był ostatnio zmieniony wcześniej niż zmodyfikowano plik. -cnewer podlega -follow tylko jeśli -follow pojawia się w linii komend przed -cnewer. -ctime n Status pliku zmienił się ostatnio n*24 godzin temu. -empty Plik jest pusty i jest albo plikiem regularnym, albo katalogiem. -gid n Numeryczny GID pliku to n. -group nazwag Plik należy do grupy nazwag (numeryczny GID jest dopuszczalny). -mmin n Dane pliku były ostatnio modyfikowane n minut temu. -mtime n Dane pliku były ostatnio modyfikowane n*24 godzin temu. -name wzorzec Podstawa nazwy pliku (z usuniętą ścieżką i poprzedzającymi katalogami) odpowiada wzorcowi powłoki wzorzec. Metaznaki (`*', `?', `[]') nie odpowiadają `.' na początku nazwy pliku. Aby zignorować kata‐ logi i pliki im podległe, użyj -prune; zobacz przykład w opisie -path. -newer plik Plik został zmodyfikowany wcześniej niż plik. -newer podlega -follow tylko jeśli -follow znajduje się w linii komend przed -newer. -nouser Do numerycznego UID pliku nie pasuje żaden użytkownik. -nogroup Do numerycznego GID pliku nie pasuje żadna grupa. -perm prawa Bity praw pliku są dokładnie równe prawom (ósemkowym lub symbolicznym). Prawa symboliczne używają 0 jako punktu wyjścia. -size n[bckw] Plik zajmuje n jednostek miejsca. Jednostki to domyślnie 512-bajtowe bloki. Jeśli doklejona jest litera `c', jest to n bajtów, jeśli `k', kilobajtów, jeśli `w', dwubajtowych słów. -type c Plik jest typu c: b blokowy (buforowany) plik specjalny c znakowy (niebuforowany) plik specjalny d katalog p łącze nazwane (FIFO) f zwykły plik l dowiązanie symboliczne s gniazdo -uid n Numeryczny UID pliku to n. -used n Do pliku ostatnio dostano się n dni po zmianie jego statusu. -user unazwa Właścicielem pliku jest użytkownik unazwa (numeryczny UID jest tu dozwolony).
Przykłady
- find -name '*t' - znajdź w katalogu bieżącym i jego podkatalogach pliki o nazwach (czyli np. rozszerzeniach) kończących się lietrą 't'
- find $HOME -maxdepth 1 -type f -size +300c -size -100k - wypisz pliki (nie katalogi) z katalogu domowego (ale nie z jego podkatalogów) o rozmiarach pomiędzy 300 bajtów a 100 kilobajtów
- find ~/ -type f -mtime +2 - znajdź w katalogu domowym pliki modyfikowane więcej niż dwa dni temu.
- find /etc -maxdepth 1 -type f -perm 600 - znajdź w katalogu /etc (ale nie w jego podkatalogach) pliki, które czytać i modyfikować może tylko ich właściciel.
2. grep
Składnia: grep [OPCJA]... WZORZEC [PLIK] ...
Szukanie WZORCA w każdym PLIKU lub na standardowym wejściu WZORZEC domyślnie jest podstawowym wyrażeniem regularnym (BRE). Przykład: grep -i 'hello world' menu.h main.c
Wybór i interpretacja wyrażeń regularnych:
-f, --file=PLIK użycie wzorców z PLIKU -i, --ignore-case zignorowanie rożnic między małymi i wlk. lit. -w, --word-regexp dopasowanie WZORCA tylko do pełnych słów -x, --line-regexp dopasowanie WZORCA tylko do całych linii
Różne:
-v, --invert-match wybierz linie nie pasujące
Sterowanie danymi wyjściowymi:
-n, --line-number wypisanie numerów linii w wyniku -d, --directories=DZIAŁANIE jak się obchodzić z katalogami, DZIAŁANIE to `read' (czytanie), `recurse' (przeglądanie rekurencujne) albo 'skip' (pominięcie). -R, -r, --recursive równoważne --directories=recurse . --include=WZORZEC przeszukiwane będą pliki pasujące do WZORCA --exclude=WZORZEC pliki pasujące do WZORCA będą pominięte --exclude-from=PLIK pominięcie plików pasujących do WZORCÓW w PLIKU --exclude-dir=WZORZEC katalogi pasujące do WZORCA będą pominięte -L, --files-without-match wypisanie tylko nazw PLIKÓW bez trafień -l, --files-with-matches wypisanie tylko nazw PLIKÓW z trafieniami -c, --count wypisanie tylko liczby pasujących linii w PLIKACH
Wyrażenia regularne (wybór)
Z, k, 2, ? (pojedyncze znaki)
[xyz] – jeden znak z podanego zbioru znaków
[a-z] – jeden znak z podanego zakresu znaków (tu: dowolna mała litera)
[^0-9] – symbol ^ oznacza dopełnienie podanego zbioru znaków (tu dowolny znak byle nie cyfra).
[^a-zA-Z] – dowolny znak nie będący literą
. (kropka) – jeden dowolny znak np. 1, z, +
^ na początku wyrażenia regularnego – oznacza początek wiersza, np. ^N – wiersz zaczynający się na literę N
$ na końcu wyrażenia regularnego – oznacza koniec wiersza, np. dziwaczka$ – wiersz kończący się słowem 'dziwaczka'
* – operator powtórzenia (dowolną liczbę razy, w tym zero razy) wyrażenia znajdującego się po lewej stronie,
\{m,n\} – operator powtórzenia (co najmniej m razy i co najwyżej n razy) wyrażenia znajdującego się po lewej stronie
Przykłady:
- grep p kaczka.txt - wypisz wiersze pliku kaczka.txt zawierające literę 'p'
- grep -v kaczka kaczka.txt - wypisz wiersze pliku kaczka.txt nie zawierające ciągu liter 'kaczka'
- grep -c zamiast kaczka.txt - podaj w ilu wierszach pliku kaczka.txt występuje ciąg 'zamiast'
- grep -i ^N kaczka.txt - wypisz wiersze zaczynające się na literę 'N' lub 'n'
- grep -w t[oa] kaczka.txt - wypisz wiersze zawierające słowa 'to' lub 'ta', ale nie dłuższe słowa zawierające te pary liter.
Zadanie
- znajdź na pracowni plik hsjkef.txt
- skopiuj do swojego katalogu
- napisz skrypt, który kolejno:
- usuwa z niego wszystkie linie zawierające cyfry
- sortuje według trzeciego znaku w wierszu
- wypisuje wynik na ekranie