Brojanje reči karaktera i linija
$ wc [-cwl] filename
$ wc -l /etc/protocols
UNIX komande primaju podatke sa standardnog ulaza (stdin), rezultate izvršenja šalju na standardni izlaz (stdout), a poruke o greškama na standardni uređaj za greške (stderr). Većina UNIX komandi koristi tastaturu kao standardni ulaz, a monitor kao standardni izlaz i uređaj za greške.
Ulaz komande preusmerava se pomoću znaka < (manje od) na sledeći način:
$ command < inputdevice
Primer:
$ wc -l < /tmp/jsnmith.dat
Za redirekciju izlaza se koristi znak >. Ukoliko se redirekcija vrši u postojeću datoteku, datoteka se briše, a zatim se kreira nova u koju se smešta rezultat izvršenja komande. Za dodavanje izlaza na postojeću datoteku koristi se znak ».
$ sort kyuss.txt > /dev/lp0
$ ls -l /home/jsmith > myfile
$ ls -l /tmp/jsmith >> myfile
$ >emptyfile
Pipeline funkcioniše na sledeći način: standardni izlaz komande sa leve strane znaka pipe (|) postaje standardni ulaz komande sa desne strane znaka. Znak pipe zahteva komande i sa leve i sa desne strane, a razmaci između znaka i komande su proizvoljni.
Primer:
$ ls -l /etc/ > /tmp/files_in_etc
$ wc -l < /tmp/files_in_etc
145
$ ls -l /etc | wc -l
145
Komanda tee omogućava da se izlaz komande šalje na više lokacija odjednom. Na primer, ako se želi redirekcija u neki fajl, i istovremeni ispis na ekran, može se uraditi sledeće:
ps -ef | tee /tmp/troubleshooting_file
Da bi se, umesto da se fajl obriše, tekući izlaz na njega dodao, treba dodati opciju -a:
ps -ef | tee -a /tmp/troubleshooting_file
Mogu se specificirati i više fajlova kao argumenti tee komande, output procesa će ići u svaki od tih fajlova.
Prikaz početka fajla
$ head -n 3 /var/log/syslog
Prikaz kraja fajla
$ tail -n 5 /var/log/syslog
Za nadgledanje promena u fajlu koristi se opcija -f.
Komanda join
dozvoljava spajanje više fajlova po zajedničkom polju.
Primer:
$ cat file1.txt
1 Pera
2 Mika
3 Laza
$ cat file2.txt
1 Peric
2 Lazic
3 Mikic
$ join file1.txt file2.txt
1 Pera Peric
2 Mika Lazic
3 Laza Mikic
U ovom slučaju fajlovi su spojeni preko prvog polja i ona moraju da budu identična. Ako nisu onda mogu da se sortiraju tako da se spajanje, u ovom slučaju, vrši preko vrednosti 1, 2 i 3.
Ako su dati sledeći fajlovi:
$ cat file1.txt
Pera 1
Mika 2
Laza 3
$ cat file2.txt
1 Peric
2 Lazic
3 Mikic
Da bi izvršili njihovo spajanje potrebno je pozvati sledeću komandu:
$ join -1 2 -2 1 file1.txt file2.txt
1 Pera Peric
2 Mika Lazic
3 Laza Mikic
-1 se odnosi na file1.txt, a -2 na file2.txt.
Komandom split
fajl se deli u odgovarajući broj različitih fajlova.
$ split somefile
Ovako se u novonastalim fajlovima nalazi po 1000 linija iz originalnog fajla i oni se zovu x**.
Korisna komanda za sortiranje izlaza neke komande ili fajla u specificiranom redosledu. Njene opcije su sledeće:
Primer:
Zebra
Quebec
hosts
Alpha
Romeo
juliet
unix
XRay
xray
Sierra
Charlie
horse
horse
horse
Bravo
1
11
2
23
sort -d /tmp/outoforder
Rezultat je:
1
11
2
23
Alpha
Bravo
Charlie
Quebec
Rome
Sierra
XRay
Zebra
horse
horse
horse
hosts
juliet
unix
xtra
sort -du /tmp/outoforder
Kontrolni karakteri se zadaju:
Primer: bc (basic calculator)
$ bc # pokreće bc
100/5 # inicira operaciju deljenja
20 # program bc prikazuje rezultat prethodne operacije
<Ctrl-d> # napuštanje programa i povratak u shell
$
Na Linux sistemima postoje dva tipa promenljivih:
U shell programiranju promenljive se ne deklarišu za specifični tip podataka - dovoljno je dodeliti vrednost promenljivoj i ona će biti alocirana prema toj vrednosti. U Bourne Again Shell-u, promenljive mogu sadržavati brojeve, karaktere ili nizove karaktera.
Sistemske promenljive mogu se videti pozivom komande env:
$ env
LC_PAPER=sr_RS
XDG_VTNR=7
MATE_DESKTOP_SESSION_ID=this-is-deprecated
LC_ADDRESS=sr_RS
SSH_AGENT_PID=2681
XDG_SESSION_ID=c2
LC_MONETARY=sr_RS
...
Neke od njih su:
Pojedinačno, sadržaj promenljive može se videti pozivom:
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
Svaka promenljiva je univerzalna i nema nikakvu deklaraciju tipa (integer, float, string) i definiše se na sledeći način:
variablename=value
Primer.
$ br=10
Prilikom definisanja, odnosno dodele vrednosti, potrebno je primeniti sledeće konvencije o imenima promenljivih:
Primer. Korektne promenljive su: HOME, SYSTEM_VERSION, br, _ime;
Primer.
$ br =10 # neispravno - prazni karakteri
$ br= 10 # neispravno - prazni karakteri
$ br = 10 # neispravno - prazni karakteri
$ br=10 # ispravno
case sensitive
$ bR=20
$ Br=30
$ echo $bR
20
Može se definisati promenljiva nulte dužine (NULL variable), odnosno promenljiva koja nema vrednost u trenutku definisanja. Vrednosti ovih promenljivih se ne mogu prikazati komandom echo, sve dok im se ne dodeli vrednost;
$ br=
$ ime=""
Primer 1.
$ echo $ime # prikazuje vrednost promenljive ime
johnny
$ echo ime # prikazuje string ime
ime
Primer 2.
$ x=10
$ xn=abc
$ echo $x $abc
10 abc
Bash shell prepoznaje tri tipa navodnika, i to:
Primer.
$ echo "Danasnji datum : date" # tretira date kao string
Danasnji datum : date
$ echo "Danasnji datum : `date`" # tretira date kao komandu
Danasnji datum : Fri Apr 2 16:30:35 CEST 2004
Regulrni izrazi su sintaksički skup fraza koje reprezentuju šablone unutar teksta ili stringova. Regularni izrazi omogućavaju reprezentaciju različitih nizova karaktera vrlo malim skupom predefinisanih karaktera. Često sadrže i metakaraktere - karaktere koji reprezentuju drugu grupu karaktera i komandi.
Fajl koji će se koristiti u svrhu testiranja je recimo /tmp/testfile (obratiti pažnju na interpunkciju i mala i velika slova):
Juliet Capulet
The model identifier is DEn5c89zt.
Sarcastic was what he was.
No, he was just sarcastic.
Simplicity
The quick brown fox jumps over the lazy dog
It’s a Cello? Not a Violin?
This character is (*) is the splat in Unix.
activity
apricot
capulet
cat
celebration
corporation
cot
cut
cutting
dc9tg4
eclectic
housecat
persnickety
The punctuation and capitalization is important in this example.
simplicity
undiscriminating
Two made up words below:
c?t
C?*.t
cccot
cccccot
Metakarakteri su korisni u redukciji količine teksta koji se koristi sa komandama i za reprezentaciju tekstualnih grupa minimalnim skupom karaktera. Sledeći metakarakteri su u široj upotrebi:
$ grep c.t /temp/testfile
Simplicity
apricot
cat
cot
cut
cutting
dc9tg4
housecat
simplicity
c?t
cccot
cccccot
Primer: Pronaći bilo koju instancu slova c i slova t sa tačno jednim samoglasnikom između.
$ grep c[aeiou]t /temp/testfile
Simplicity
apricot
cat
cot
cut
cutting
housecat
simplicity
cccot
cccccot
Primer: Pronaći sve instance slova c i slova t sa nula ili više karaktera između njih.
$ grep c*t /temp/testfile
Juliet Capulet
The model identifier is DEn5c89zt.
Sarcastic was what he was.
No, he was just sarcastic.
Simplicity
The quick brown fox jumps over the lazy dog
It’s a Cello? Not a Violin?
This character is (*) is the splat in Unix.
activity
apricot
capulet
cat
celebration
corporation
cot
cut
cutting
dc9tg4
eclectic
housecat
persnickety
The punctuation and capitalization is important in this example.
simplicity
undiscriminating
c?t
C?*.t
cccot
cccccot
Primer: Pronaći sve pojave karaktera c i karaktera 5, a da između njih ne stoji nikakav samoglasnik.
$ grep c[^aeiou]t /temp/testfile
dc9tg4
c?t
Primer: Pronaći sve pojave stringa ca na početku linije.
$ grep ^ca /temp/testfile
capulet
cat
Bez karaktera ^, sekvenca ca bi mogla da se nađe bilo gde u stringu:
Sarcastic was what he was.
No, he was just sarcastic.
capulet
cat
housecat
The punctuation and capitalization is important in this example.
Primer: Pronaći sve pojave slova c praćenog samoglasnikom i slovom t na početku linije.
$ grep ^c[aoiue]t /temp/testfile
cat
cot
cut
cutting
Da je izostavljen karakter ^, sekvenca bi mogla biti bilo gde u liniji:
Simplicity
apricot
cat
cot
cut
cutting
housecat
simplicity
cccot
cccccot
Primer: Pronaći linije koje se završavaju slovima c i t između kojih može biti bilo šta.
$ grep c*t$ /temp/testfile
Juliet Capulet
apricot
capulet
cat
cot
cut
housecat
c?t
C?*.t
cccot
cccccot
Primer: Pronaći sve pojave sekvence karaktera c?t.
Primer: Pronaći sve pojave karaktera c i karaktera t sa jednim ili nijednim karakterom između njih.
Primer: Pronaći sve pojave karaktera c i t sa bilo kojim slovom između njih.
Primer: Pronaći sve pojave karaktera c i t sa bilo kojom cifrom između njih.
Primer: Pronaći sve pojave slova c i slova t, sa jednim karakterom između koji može biti bilo koje slovo u opsegu od c do t ili cifra između 0 i 4.
Kod proširenih regularnih izraza koji se aktiviraju npr. navođenjem opcije -E grep komandi, a dostupni su i u programima, awk, emacs, vi, itd. Karakteristični su sledeći metakarakteri koji služe za označavanje ponavljanja karaktera ili podizraza (blokova):
Složen primer:
Fajl proba.txt:
www8.dobarsajt1.edu
www678.amu.ac.zu5l
www6.ailmit.net
www.euler.ni.ac.yu
mitcl.edu
www.core.amu.edu
www.znanje.edu
Izlaz komande:
$ grep -E "^(w{3}[0-9]*\.)?[a-z]{1}[a-z0-9]{1,7}((\.ac\.[a-z]{2})|(\.edu))$" proba.txt
mitcl.edu
www.znanje.edu
Objašnjenje: Navedeni regularni izraz znači da string može, a ne mora (zbog “?”) početi sekvencom “www”+bilo koje cifre nakon čega sledi tačka. Iza tačke mora biti slovo, a zatim sekvenca od najmanje 1, a najviše 7 alfanumerika (slova ili brojeva), dok na kraju mora biti domen “.ac.(dva bilo koja slova)” ili “.edu”.
Napisati regularni izraz koji pronalazi decimalne brojeve.
Primer
decimalni broj | 3.14529 |
decimalni broj | -255.34 |
decimalni broj | 128 |
decimalni broj | 1.9e10 |
decimalni broj | 123,340.00 |
nije decimalni broj | 720p |
Napisati regularni izraz koji pronalazi brojeve telefona.
Primer ispravnih brojeva telefona
415-555-1234
650-555-2345
(416)555-3456
202 555 4567
4035555678
1 416 555 9292