Like most pipelines, this one will fail in mysterious ways under certain circumstances.
– The UNIX-HATERS Handbook
Deksryptory strumieni związanych z procesami (np. uruchomionymi komendami):
standardowe wejście (stdin)
standardowe wyjście (stdout)
wyjście błędów (stderr)
…
KOMENDA 1> PLIK lub KOMENDA > PLIKprzekieruj stdout procesu na początek pliku PLIK (więc plik
zostanie nadpisany)
KOMENDA 2> PLIKto samo dla stderr
KOMENDA 1>> PLIK lub KOMENDA >> PLIKprzekieruj stdout procesu na koniec pliku PLIK (więc dane będą
dopisane na koniec pliku)
KOMENDA 2>> PLIKto samo dla stderr
KOMENDA < PLIK lub < PLIK KOMENDAotwórz plik PLIK i przekieruj jego zawartość na stdin procesu
Przykłady:
cat FILE1 > FILE2 – zapisz zawartość FILE1 do FILE2
man man > man
echo “ala ma kota” > plik
less < FILE1
< FILE1 less
Potok (pipe) łączy stdout jednego procesu z stdin drugiego procesu:
KOMENDA_A | KOMENDA_B
Potok może łączyć ze sobą wiele procesów (tzw. pipeline).
- KOMENDA_0 | KOMENDA_1 | … | KOMENDA_N
stdout z komendy 0 jest podawane na stdin komendy 1, itp.
Przykłady:
cat PLIK | less– otwórzPLIK, podaj zawartość do komendyless(która pozwoli na przewijanie w górę/w dół)
cat PLIK1 | head -n 1 | cat PLIK2– otwórz plik 1, wytnij tylko pierwszą linię, połacz pierwszą linie pliku 1 z plikiem 2
Istnieją dwa pliki czarnych dziur w systemie (data sinks):
/dev/null
/dev/zero
Wszelkie dane zapisane do tych plików zostają automatycznie usunięte (zignorowane).
Zadania:
Uruchom komendę firefox (lub chromium lub opera) w terminalu
Uruchom tą samą komendę przekierowując jej stdout i stderr do czarnej dziury
Uruchom komendę find / z przekierowaniem tak, żeby nie wypisywała błędów
na konsolę
Uruchom komendę find / z przekierowaniem tak, żeby wypisywała na konsolę
tylko błędy
Potoki pozwalają łączyć komendy ad hoc w skomplikowane narzędzia do przetwarzania tekstu.
echowyświetl napis (podany przez argumenty)
interpretuj znaki specjalne (lista znaków specjalnych w podręczniku)
nie dodawaj na końcu znaku nowej linii
Przykłady:
echo hello world
echo "hello\nworld"
echo -e "hello\nworld"
Zadania:
Utwórz plik PLIK1 o zawartości hello world za pomocą komendy
echo.
Dopisz komendą echo na koniec pliku PLIK1 tekst:
linii: 1
słów: 2
znaków: 12
catkonkatenacja plików (catenate)
cat FILEwypisanie zawartości pliku
cat FILE1 FILE2wypisanie skonkatenowanej zawartości pliku
ponumeruj linie
ponumeruj niepuste linie
pomiń puste linie
zaznacz koniec każdej lini znakiem $
Zadania:
Uruchom komendy cat bez argumentów i wpisz kilka linii (zakończ znakiem
końca strumienia)
Za pomocą komendy cat utwórz plik PLIK2 o treści:
We are using Linux daily to UP our productivity.
So UP yours!
-- Adapted from Pat Paulsen by Joe Sloan
Za pomocą komendy cat skopiuj zawartość pliku PLIK2 do
PLIK3
Za pomocą komendy cat połącz zawartość plików PLIK2 i PLIK1 i
zapisz ją do pliku PLIK3
Wyświetl zawartośc pliku PLIK3 z ponmumerowanymi liniami
tac
catod tyłu
Zadania:
Uruchom komendy tac bez argumentów i wpisz kilka linii
Za pomocą komendy tac skopiuj zawartość pliku PLIK2 do PLIK4
Wyświetl zawartośc pliku PLIK2 za pomocą komendy tac
Wyświetl zawartośc pliku PLIK2 za pomocą komend tac tak, żeby
kolejność linii nie była odwrócona
morestronnicowanie tekstu (<spacja> – następna strona, q – wyjście)
lessprzewijanie tekstu (<↑>/<↓> – przewijanie góra/dół, <pgup>/<pgdn> – poprzednia/następna strona, q – wyjście)
Zadania:
Za pomocą komendy ls utwórz plik PLIK5 którego zawartość to lista
plików i katalogów w katalogu dev
Wyświetl zawartość pliku PLIK5 ze stronnicowaniem za pomocą more
Wyświetl zawartość pliku PLIK5 z przewijaniem za pomocą less
Wyświetl zawartość katalogu /dev ze stronnicowaniem za pomocą more
(bez używania dodatkowych plików)
Wyświetl zawartość katalogu /dev z przewijaniem za pomocą less (bez
używania dodatkowych plików)
headczyta początek pliku (strumienia) - domyślnie 10 linii
czytaj K pierwszych linii; jeśli K zaczyna się od
znaku -, czytaj wszystkie linie pliku oprócz K
ostatnich
tailczyta koniec pliku (strumienia) - domyślnie 10 linii
czytaj K ostatnich linii; jeśli K zaczyna się od
znaku +, czytaj wszystkie linie pliku oprócz K
pierwszych
nie przerywaj czytania, wyświetlaj dane dopisywane do pliku w miare jak się pojawiają
Zadania:
Odczytaj zawartość pliku PLIK5 numerując linie (cat) i wyświetl
tylko pierwsze 10 linii (head)
Odczytaj zawartość pliku PLIK5 numerując linie (cat) i wyświetl
tylko pierwszą linię (head)
Odczytaj zawartość pliku PLIK5 numerując linie (cat) i wyświetl
tylko ostatnie 10 linii (tail)
Odczytaj zawartość pliku PLIK5 numerując linie (cat) i wyświetl
tylko ostatnią linię (tail)
Odczytaj zawartość pliku PLIK5 numerując linie (cat) i wyświetl
tylko 5 linię (head i tail)
trtłumaczenie znaków (na inne znaki) (translate)
zamiast tłumaczyć, usuń powtórzenia
zamiast tłumaczyć, usuń znaki
zamiast wykonywać operacje dla wskazanego zbioru znaków, wykonuj ją dla wszystkiego co nie mieści się we wskazanym zbiorze znaków (dopełnienie)
Klasy znaków: [:upper:], [:lower:], [:alpha:], etc. (man tr –
dokładny opis wszystkich klas)
Przykłady:
tr ab '.?' – zamień wszystkie litery a na kropki, wszystkie litery
b na znaki zapytania
tr -d a – usuń wszystkie znaki a
tr -cd a – usuń wszystkie znaki inne niż a
tr -s ' ' – usuń wszystkie powtarzające się spacje
Zadania:
Utwórz plik PROP zawierający listę nazw następujących własności:
host,
port,
initial barrier,
start barrier,
final barrier,
number of shared objects,
number of clients,
module 1
module 2
Za pomocą komendy tr wyświetl zawartość PROP bez znaków
interpunkcyjnych
Wyświetl zawartość PROP jak powyżej, następnie zamień wszystkie spacje
na podkreślniki
Wyświetl zawartość PROP jak powyżej, następnie zamień wszystkie małe
litery na wielkie i zapisz wynik do pliku PROP_GEN
cutwycinanie pól (słów) z rekordu (linii)
separator pól
pola do wyświetlenia
znaku do wyświetlania
wyświetl wszystkie pola które nie zostały wskazane (dopełnienie)
Zadania:
Utwórz plik students zawierający listę studentów (uwaga na spacje):
Imię Nazwisko Indeks Oceny
Adam Rymski 71711 4 5 3
Tomasz Filipiuk 71745 4 4
Karol Effimenko 101023 4 3
Anna Nowak 71791 3.5 5 5 5
Michał Korsakow 71921 3.5 3.5 3
Henryk Wojciechowski 71710 3 3 2
Michał Cierń 71717 4.5 4 5
Marcin Kozak 71729 4 4.5 4.5
Ewa Tomaszewska 71733 4 4.5 5
Używając komendy cut wypisz tylko nazwiska studentów (przydatna może być
komenda tr)
Używając komendy cut wypisz tylko imiona i nazwiska studentów bez
nagłówka (head/tail)
Używając komendy cut wypisz tylko numery indeksów i oceny studentów
sortsortowanie liniami
odwróć kolejność
sortowanie wg wartości liczbowych
nie zważaj na wielkośc znaków
sortowanie wg wartości losowych
sortuj wg pola (definicja KEY w podręczniku)
uniqusuń powtarzające się linie, działa na posortowanych danych (unique)
policz powtarzające się linie
Zadania:
Wyświetl nazwiska studentów z pliku students w kolejności alfabetycznej
za pomocą sort, tr, tail/head, cut
Wyświetl indeksy studentów z pliku students w kolejności rosnącej
Wyświetl indeksy studentów z pliku students w kolejności malejącej
Wylosuj nazwisko jednego studenta z pliku students
xargsprzekieruj strumień na argumenty do komendy
xargs echo – wszystko co zostanie wpisane na strumień wejściowyzostanie przekazane do komendy echo jako argumenty
wstaw każdy z argumentów za wskazany STRING, np.
xargs -I"\{\}" echo "Hello, \{\}. Did you miss me?"
przyjmij, że obiekty w strumieniu wejściowym są
rozdzielone znakiem \0 zamiast \n (patrz np:
find)
Zadania:
Utwórz plik addr z adresami stron internetowych:
http://www.example.com/
http://www.cs.put.poznan.pl/ksiek/
http://www.google.com/
Otwórz wszystkie strony zapisane w pliku addr za pomocą dowolnej przeglądaki (xargs)
wcliczenie znaków/słów/linii (word count)
licz tylko znaki
licz tylko słowa
licz tylko linie
Zadania:
Policz znaki, słowa i linie w znajdujące się w pliku PLIK2
Policz słowa znajdujące się w pliku PLIK2
Policz litery t znajdujące się w pliku students (tr)
teewypisz otrzymany strumień do strumienia wyjsciowego, a także do wskazanych plików
dopisz zamiast nadpisywać
grep
konfigurowalny filtr - przepuszcza z stdin do stdout linie które pasują do zadanego wzorca (global / regular expression / print)
grep ala - przepuść linie które zawierają napis ala
- -i, --ignore-case
nie zważaj na wielkość liter
- -v, --invert match
przepuść tylko linie które nie pasują do wzorca (dopełnienie)
- -e, --regexp=PATTERN
zastosuj wyrażenie regularne do filtrowania
^ – początek linii
$ – koniec linii
. – dowolny znak
X? – (jakikolwiek) znak X wystąpi opcjonalnie
X* – (jakikolwiek) znak X może wystąpić dowolną liczbę razy (w tymwcale)
\X – escape znaku X
[X] – klasa znaków X, np:[a-z] – jakikolwiek znak ze zbioru a-z
[a-zA-Z0-9] – jakakolwiek litera lub cyfra
[., ] – spacja, przecinek lub kropka
^.$ – linia składająca sie tylko z jednego dowolnego znaku
^mm*$ – linia składająca się z wyłącznie z przynajmniej jednejlitery m
^\t\. – linia rozpoczynająca sie od tabulatora po którym występujeznak .
Zadania:
Utwórz plik students zawierający listę studentów (uwaga na spacje):
Imię Nazwisko Indeks Oceny
Adam Rymski 71711 4 5 3
Tomasz Filipiuk 71745 4 4
Karol Effimenko 101023 4 3
Anna Nowak 71791 3.5 5 5 5
Michał Korsakow 71921 3.5 3.5 3
Henryk Wojciechowski 71710 3 3 2
Michał Cierń 71717 4.5 4 5
Marcin Kozak 71729 4 4.5 4.5
Ewa Tomaszewska 71733 4 4.5 5
Za pomocą grep wyświetl wszystkich studentów którzy uzyskali ocenę 2
Wyświetl studentów którzy nie uzyskali żadnej oceny 2
Wyświetl studentów których imiona zaczynają się na M
Wyświetl studentów których imiona zaczynają się na M lub A
Wyświetl studentów których nazwiska zaczynają się na literę z pierwszej połowy alfabetu
Wyświetl studentów których nazwiska nie zawierają litery k
Wyświetl studentów których numer indeksu jest sześciocyfrowy
Wyświetl studentów którzy uzyskali ocenę 5 jako ostatnią
Wyświetl studentów którzy uzyskali ocenę 5 jako przedostatnią
Wyświetl studentów którzy uzyskali ocenę przynajmniej jedną 3 i mają na imię Michał
bckalkulator przyjmujący dane ze standardowego wejścia (basic calculator)
echo 2 + 2 | bc
bc jest kalkulatorem arbitrary precision, więc można (trzeba) zdefiniować ile miejsc po przecinku nas interesuje
echo "scale=2; 6.0 / 4.0" | bc
Zadanie dla odważnych:
Zsumuj oceny uzyskane przez wszystkich studentów w pliku students
(bc, cut, tr, head/tail, xargs, echo)