Cijevi, preusmjeravanje ulaza i izlaza
-
cijev, znak
|(AltGr+W na hrvatskoj tipkovnici), omogućuje da izlaz jedne naredbe postane ulaz druge naredbe- broj cijevi u nizu je praktično neograničen
- jedna od osnovnih vještina rada na operacijskim sustavima slični Unixu
-
primjer korištenja cijevi
grep rijec datoteka.txtmožemo izvesti i na načincat datoteka.txt | grep rijec- sve naredbe koje ćemo dalje navoditi mogu se koristiti s cijevima ili bez njih
Filteri uz cijevi
-
wc, kratica za brojanje riječi (engl. word count)- ispisuje broj linija (
-l), riječi (-w), znakova (-m) i bajtova (-c) u tekstualnoj datoteci - može ispisati i najdulju liniju (
-L)
- ispisuje broj linija (
Zadatak
- Napravite direktorij
Zadatak3i u njemu tri tekstualne datoteke, koje nazovite redomtekst1.txt,tekst2.txtitekst3.txt. U prvu unesite dane u tjednu, u drugu nekoliko imena i prezimena kolega, a treću ostavite praznom. -
Objasnite razliku u izlazu između:
wc tekst*.txticat tekst*.txt | wcwc --m tekst1.txtiwc --c tekst1.txt
-
U rekurzivnom ispisu direktorija
/usrprebrojite koliko ukupno znakova imaju sve linije koje sadrže niz/bin. Koristite cijevi. - Iz ranije stvorene datoteke
postavke.txtprovjerite točan broj zapisa IBM-ovih kodiranja u čijem nazivu postoji troznamenkasti broj. Koristite cijevi!
sortreda linije u danoj tekstulanoj datoteci po danom kriteriju
Zadatak
-
Napravite datoteku
eu.txtu koju zapišite nazive bar 10ak država EU. Nakon toga poredajte popis:- u abecednom poretku, bez korištenja cijevi
- u abecednom poretku, korištenjem cijevi
- u poretku suprotnom abecednom, korištenjem cijevi
-
Nadopunite popis tako da ispred naziva države upišete godinu njezina pridruživanja, te:
- poredajte nazive država koje završavaju nizom
kaprema redoslijedu njihova pridruživanja; - države koje su se Uniji pridružili nakon 2000. godine poredajte prema redoslijedu pridruživanja i zapišite u datoteku
2000.txt, te prebrojite znakove koje ste upisali u datoteku. Zašto je dobiveni broj znakova jednak 0?
- poredajte nazive država koje završavaju nizom
uniquzastopne duplicirane linije u tekstualnoj datoteci ispisuje samo jednom-
teeistovremeno ispisuje na standardni izlaz i u datoteku; primjer:ls -a > zapis.txt ls -a | tee zapis.txt | less # izlaz jedne naredbe (ls -a) se profiltrira u tee i zapisuje se u datoteku zapis.txt te se nakon toga ispisuje u lessu ls -a | tee zapis.txt | grep Faks | less ls -a | tee zapis.txt | grep Faks | less > zapis.txt- koristimo je za fleksibilniji rad s cijevima
- saznajte više o naredbi na Wikipedijinoj stranici
Zadatak
- Napišite naredbu koja iz datoteke
studenti1.txtizdvaja sve linije koje počinju slovomM, i istovremeno ih šalje programulessi nadopisuje u datotekustudenti-izdvojeni.txt(Uputa: iskoristite naredbuteei cijevi.) - Iz datoteke
eu.txtjednom naredbom izlistajte sve države koje su se Uniji pridružili prije2000. godinei upišite ih u datotekuprije2000.txt, sortirajte taj popis i prebrojite broj država koje ne sadrže slovoei broj upišite u datotekubroj.txt.
Standardni ulaz, standardni izlaz i standardni izlaz za greške
Gotovo svaka naredba koju koristimo daje nam neki rezultat njezina izvođenja, izlaz; to mogu biti podaci kojima naredba treba rezultirati i poruke o greškama. Rezultati izvođenja zapisuju se u posebnu datoteku koja se naziva standardni izlaz (engl. standard output). Poruke o greškama zapisuju se u posebnu datoteku koja se naziva standardni izlaz za greške (engl. standard error).
Mnogi programi dobivaju input od standardnog ulaza (engl. standard input), a u zadanim postavkama to je tipkovnica. Korištenjem preusmjeravanja ulaza možemo odrediti otkud dolazi standardni ulaz, a korištenjem preusmjeravanja izlaza možemo odrediti gdje se šalju standardni izlaz i standardni izlaz za greške.
- preusmjeravanje izlaza, znak
>omogućuje preusmjeravanje teksta koji bi se ispisao na ekranu u tekstualnu datoteku -
>vs>>-- prvi znak briše sadržaj, a drugi znak ga nadopisujecat datoteka.txt > datoteka1.txt # rezultat naredbe cat se zapisuje u datoteku datoteka1.txt # orginalni sadržaj datoteke se zamjenjuje sa sadržajem druge datoteke cat datoteka1.txt # ispis na ekran cat file1.txt >> file2.txt # dupli sadržaj; sadržaj prve datoteke se nadodaje na sadržaj druge datoteke -
preusmjeravanja izlaza za greške, znakovi
2>i2>> - preusmjeravanje ulaza, znak
<rjeđe se koristi, većina alata može čitati tekstualne datoteke direktno
Zadatak
- Odredite koja je razlika između
echo "XY" > tekst.txtiecho "XY" >> tekst.txt. - Napravite datoteku
studenti1.txti u nju upišite nekoliko imena i prezimena vaših kolega. Izdvojite sve studente kojima prezime ima na drugom mjestu neki samoglasnik, i rezultat preusmjerite u datotekustudenti-izdvojeni.txt. - U datoteku
studenti1.txtdodajteJohn Terry,Arsen DediciMile Kekin. Zatim uz korištenje cijevi izdvojite sve studente kojima prezime na drugom mjestu ima slovoe, te rezultat nadopišite u datotekustudenti-izdvojeni.txt. - Izvedite
lstako da kao argument proslijedite nepostojeći direktorij. Radi li preusmjeravanje izlaza? Zašto? Probajte isto sman-om čiji je argument nepostojeća naredba.
Dodatni zadatak
Koja je razlika između cat > tekst1.txt i cat >> tekst1.txt
- ukoliko datoteka ne postoji,
- ukoliko datoteka postoji i prazna je,
- ukoliko datoteka postoji i nije prazna?
xargskoristi standardni ulaz kao kao dio naredbe koju pokreće
ToDo
Ovdje nedostaje zadatak.
Uspoređivanje sadržaja datoteka
commuspoređuje dvije sortirane datoteke liniju po liniju
Zadatak
- U datoteku
naredbe.txtpreusmjerite popis sadržaja direktorija/bin. U istu datoteku nadopišite i popis sadržaja direktorija/sbin. Unaredbe2.txtpreusmjerite sadržaje direktorija/usr/bini/usr/sbin. - Usporedite ove dvije datoteke i na ekran ispišite samo linije koje su jedinstvene datoteci
naredbe.txt. - Sortirajte obje datoteke i spojite ih u jednu naziva
nar.txt, te na ekran ispišite sve linije koje se ponavljaju u toj datoteci.
-
diffuspoređuje dvije proizvoljne datoteke liniju po liniju- s parametrom
-uprikazuje razliku u unificiranom diff formatu
- s parametrom
Zadatak
- Napišite osnovni "Hello world" program u C++-u i spremite ga u
program1.cpp. - Kopirajte datoteku u
program2.cpp. Izmijenite datotekuprogram2.cpptako da ispisuje "Pozdrav svijete". - Usporedite razliku između izlaza naredbe
diffidiff -u.
Pitanja za ponavljanje
- Što su cijevi i zašto su nam korisne?
- Koje filtere najčešće koristimo uz cijevi? Koja je njihova uloga?
- Prisjetite se parametara koje može primiti naredba
wc. - Na kojem principu radi preusmjeravanje izlaza?
- Definirajte
stdin,stdoutistderr. - Objasnite prednosti naredbe
tee. - Kako usporediti sadržaj dviju datoteka?
- Razmislite kada je najkorisnije upotrijebiti naredbu
comm?
Author: Vedran Miletić, Vanja Slavuj, Sanja Pavkov