brisanje praznih redaka

25
1 Brisanje praznih redaka Brisanje 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

Upload: colton

Post on 14-Jan-2016

35 views

Category:

Documents


0 download

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 Presentation

TRANSCRIPT

Page 1: Brisanje praznih redaka

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

Page 2: Brisanje praznih redaka

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…)

Page 3: Brisanje praznih redaka

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

Page 4: Brisanje praznih redaka

4

AlternativeAlternative

izbor, jedna od ponuđenih mogućnosti

“|” prečka, okomita crtaodvaja moguće izbore“M|F”, “\+|-”, “a|e|i|o|u”

Page 5: Brisanje praznih redaka

5

GrupiranjeGrupiranje

() zagrade određuju doseg i prvenstvo operatora Primjeri:

(b|k)rdo je isto kao (brdo|krdo)

Page 6: Brisanje praznih redaka

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.

Page 7: Brisanje praznih redaka

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

Page 8: Brisanje praznih redaka

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

Page 9: Brisanje praznih redaka

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

Page 10: Brisanje praznih redaka

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

Page 11: Brisanje praznih redaka

11

ZadatakZadatak

$ sed -e '/^$/d' file > newfile

Preradite RI tako da se brišu prazni retci samo ako ih je više od jedan

Page 12: Brisanje praznih redaka

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.

Page 13: Brisanje praznih redaka

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

Page 14: Brisanje praznih redaka

14

Brojanje praznih redakaBrojanje praznih redaka

cat filename | awk ' /^['\ '|'\\t']*$/ { ++x } END { print “Br. praznih redaka = " x } '

Page 15: Brisanje praznih redaka

15

Decimalni brojDecimalni broj

Protumačite ovaj izraz

(\+|-)?([0-9]+\.?[0-9]*|\.[0-9]+)([eE](\+|-)?[0-9]+)?

Page 16: Brisanje praznih redaka

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 --

Page 17: Brisanje praznih redaka

17

MetaznakoviMetaznakovi

[ otv.uglata \ rez ^ kapica $ dolar . točka | prečka

? upitnik * zvjezdica + plus ( otvorena obla

zagrada ) zatvorena

obla zagrada

Page 18: Brisanje praznih redaka

18

Ponavljanje klasePonavljanje klase

Ponavlja se cijela klasa, ne samo znak koji se podudara [0-9]+ podudara se 222 ali I

Page 19: Brisanje praznih redaka

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.

Page 20: Brisanje praznih redaka

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

Page 21: Brisanje praznih redaka

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^]

Page 22: Brisanje praznih redaka

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

Page 23: Brisanje praznih redaka

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: \.

Page 24: Brisanje praznih redaka

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]))

Page 25: Brisanje praznih redaka

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