brisanje praznih redaka
DESCRIPTION
Brisanje praznih redaka. $ sed -e '/^$/d' file > new file Unutar navodnika ('), znakovi (/) omeđuju RI koji će interpret irati sed ^ početak $, kraj retka, ništa između d delete , briši retke koji se podudaraju - PowerPoint PPT PresentationTRANSCRIPT
1
Brisanje praznih redakaBrisanje praznih redaka
$ sed -e '/^$/d' file > newfile
Unutar navodnika ('), znakovi (/) omeđuju RI koji će interpretirati sed
^ početak $, kraj retka, ništa između d delete, briši retke koji se podudaraju Standardno ponašanje sed-a je ispis svakog
retka, sve osim praznih redaka bit će prepisano
2
WikipediaWikipedia
Regularni izraz je niz znakova (string) koji opisuje, ili se podudara (matches) sa skupom znakova, u skladu sa sintaksnim pravilima
RI koriste uređivači teksta, alati za pretraživanje, i programski jezici (Perl, Python, Tcl, PHP)
Alati Unixa prvi su popularizirali koncept RI (grep, sed, awk…)
3
DefinicijaDefinicija
RI, često zvan i “uzorak”, jest izraz koji opisuje skup znakova (strings).
Skraćen opis skupa, bez nabrajanja svih članova
Isti skup mogu opisivati različiti uzorci. više rješenja za isti problem
4
AlternativeAlternative
izbor, jedna od ponuđenih mogućnosti
“|” prečka, okomita crtaodvaja moguće izbore“M|F”, “\+|-”, “a|e|i|o|u”
5
GrupiranjeGrupiranje
() zagrade određuju doseg i prvenstvo operatora Primjeri:
(b|k)rdo je isto kao (brdo|krdo)
6
KvantifikacijaKvantifikacija
Nakon znaka ili grupe znakova određuje broj ponavljanja
? 0 ili 1 pojava prethodnog izraza colou?r color i colour
* 0 ili više ponavljanja “br*” b, br, brr itd.
+ barem jedan, odn. jedan ili više “br+” označava br, brr, brrr itd.
7
BasicBasic
Stari Unixovi RI, zastarjeli, zamijenjeni Posix proširenjima
većina znakova tretiraju se doslovno, izuzetak su metaznakovi
. bilo koji pojedinačni znak [] jedan znak od onih koji se nalaze u zagradama [^] jedan znak koji nije sadržan u zagradama ^ početak retka $ kraj reda \(\) označeni podizraz, blok
8
\n n je znamenka od 1 do 9, podudara se s n-tim podizrazom (nepravilno)
* ponavljanje ako se izraz odnosi na pojedinačni znak, 0 ili više ponavljanja
tog znaka na pr. [abc]* “”,a,b,c,ab,ac,bc,abc
{x,y} ponavljanje prethodnog bloka najmanje x, najviše y puta
9
PosixPosix
definira klase znakova [:upper:] [A-Z] velika slova [:lower:] [a-z] mala slova [:alpha:] [a-zA-Z] slova [:allnum:] [a-zA-Z0-9] brojke I slova [:digit:] [0-9] brojke [:xdigit:] [0-9A-Fa-f] heksadecimalni brojevi
10
PosixPosix
[:punct:] [.,:;!?] punctuation [:blank:] [ \t] razmak I tab [:space:] [\t\n\r\f\v] prazni znakovi [:cntrl:] kontrolni znakovi [:graph:] printed characters [:print:] [^\t\n\r\f\v] printed characters &
space
11
ZadatakZadatak
$ sed -e '/^$/d' file > newfile
Preradite RI tako da se brišu prazni retci samo ako ih je više od jedan
12
Brisanje praznih redaka IIBrisanje praznih redaka II
Što ako redak sadrži praznine? “ “, \t
# sed -e '/^[ ]*$/d' InputFile >OutputFile
U zagrade ubacite razmak i tab.
13
Brisanje praznih redaka IIIBrisanje praznih redaka III
Ako se ne služite sed-om:
$ cat file1 | grep -v '^$' >file2
$ grep -v "^ *$" file-y > file-x
14
Brojanje praznih redakaBrojanje praznih redaka
cat filename | awk ' /^['\ '|'\\t']*$/ { ++x } END { print “Br. praznih redaka = " x } '
15
Decimalni brojDecimalni broj
Protumačite ovaj izraz
(\+|-)?([0-9]+\.?[0-9]*|\.[0-9]+)([eE](\+|-)?[0-9]+)?
16
LinkoviLinkovi
http://www.regular-expressions.info/quickstart.html
http://en.wikipedia.org/wiki/Regular_expression
http://sitescooper.org/tao_regexps.html
http://www.amk.ca/python/howto/regex/
http://ruddo.com/projects/wp-search-replace/wp-search-replace-regexptut/
http://gnosis.cx/publish/programming/regular_expressions
html http://codeproject.com/dotnet/RegexTutorial.asp --
17
MetaznakoviMetaznakovi
[ otv.uglata \ rez ^ kapica $ dolar . točka | prečka
? upitnik * zvjezdica + plus ( otvorena obla
zagrada ) zatvorena
obla zagrada
18
Ponavljanje klasePonavljanje klase
Ponavlja se cijela klasa, ne samo znak koji se podudara [0-9]+ podudara se 222 ali I
19
LookLook--aheadahead
Predviđanje? Ovo znaju Perl i Python?
"(?=uzorak)" zero-width positive look-ahead assertion
"/\w+(?=\t)/" riječ ako je iza nje tab, koji neće biti u $&
"(?!uzorak)" zero-width negative look-ahead assertion
"/slon(?!ica)/" “slon" ako za njim ne slijedi “ica“
Note however that look-ahead and look-behind are NOT the same thing. You cannot use this for look-behind.
20
LookLook--behindbehind
Osvrtanje? "(?<=pattern)" zero-width positive look-behind assertion.
"/(?<=\t)\w+/" riječ iza taba, tab nije uključen u $&
Works only for fixed-width look-behind
"(?<!pattern)" zero-width negative look-behind assertion
"/(?<!na)slon/" “slon" ako nije iza “na“
Works only for fixed-width look-behind
21
Metaznakovi unutar klaseMetaznakovi unutar klase
Neki ostaju metaznakovi: ^ \ - ] Ako ih doslovno tražimo, treba ih citirati: [\\x] \ ili x
Neki mijenjaju značenje [^x] negacija, znak koji nije x
Neke ne treba citirati: [*+] tražimo zvjezdicu ili plus, isto što i [\*\+] [\\]] tražimo \ ili ], može i ovako: []\\] [\^x] ^ ili x, isto što i: [x^]
22
VježbaVježba
RI koji “hvata” IP adrese
4 x cijeli broj između 0 i 255, s točkama između brojeva
odn. 4 byta odvojena točkama na pr. 192.168.0.1
23
IP adresaIP adresa
Rješenje: korak po korak, definirajmo moguće kombinacije
0-99: (\d{1,2}) 100-199: (1\d{2}) 200-249: (2[0-4]\d) 250-255: (25[0-5]) I točka: \.
24
IP adresaIP adresa jedan od četiri uzorka mora biti istinit:
((\d{1,2}) | (1\d{2}) | (2[0-4]\d) | (25[0-5])) i još točka:
((\d{1,2}) | (1\d{2}) | (2[0-4]\d) | (25[0-5]))\. pa sve to još u zagrade:
(((\d{1,2}) | (1\d{2}) | (2[0-4]\d) | (25[0-5]))\.) ponovi tri puta:
(((\d{1,2}) | (1\d{2}) | (2[0-4]\d) | (25[0-5]))\.){3} I dodaj još četvrti byte…
(((\d{1,2}) | (1\d{2}) | (2[0-4]\d) | (25[0-5]))\.){3} ((\d{1,2}) | (1\d{2}) | (2[0-4]\d) | (25[0-5]))
25
Može li to jednostavnije?Može li to jednostavnije?
[0-9]{1,3}\. [0-9]{1,3}\. [0-9]{1,3}\. [0-9]{1,3}
Je li ovo ispravna IP adresa?
457.999.2.555