3.2 Lekcija 2
Sertifikat: |
Linux Essentials |
---|---|
Verzija: |
1.6 |
Tema: |
3 Moć komandne linije |
Cilj: |
3.2 Pretraga i ekstrakcija podataka iz datoteka |
Lekcija: |
2 od 2 |
Uvod
U ovoj lekciji ćemo pogledati alate koji se koriste za manipulaciju tekstom. Ove alate često koriste administratori sistema ili programi za automatsko praćenje ili identifikaciju specifičnih informacija koje se ponavljaju.
Pretraga unutar datoteka sa grep
Prvi alat o kojem ćemo govoriti u ovoj lekciji je grep
. grep
je skraćenica od izraza “global regular expression print” i njegova glavna namjera je pretraživanje unutar datoteka za specificirani uzorak. Komanda daje liniju koja sadrži navedeni uzorak označen crvenom bojom.
$ grep bash /etc/passwd root:x:0:0:root:/root:/bin/bash user:x:1001:1001:User,,,,:/home/user:/bin/bash
grep
, kao i većina komandi, također se može podesiti korištenjem opcija. Evo najčešćih:
-i
-
pretraga je neosjetljiva na velika i mala slova
-r
-
pretraga je rekurzivna (pretražuje sve datoteke unutar datog direktorija i njegovih poddirektorija)
-c
-
pretraga broji broj podudaranja
-v
-
obrnite podudaranje, da ispišete redove koji se ne podudaraju sa pojmom za pretraživanje
-E
-
uključuje proširene regularne izraze (potrebne nekim naprednijim meta znakovima kao što su
|
,+
and?
)
grep
ima mnogo drugih korisnih opcija. Konsultujte man stranicu da saznate više o tome.
Regularni izrazi
Drugi alat je veoma moćan. Koristi se za opisivanje bitova teksta unutar datoteka, koji se također nazivaju regularni izrazi. Regularni izrazi su izuzetno korisni u izdvajanju podataka iz tekstualnih datoteka konstruiranjem obrazaca. Obično se koriste u skriptama ili pri programiranju sa jezicima visokog nivoa, kao što su Perl ili Python.
Kada radite sa regularnim izrazima, veoma je važno imati na umu da je svaki znak bitan i da je obrazac napisan sa svrhom da se podudara sa određenim nizom znakova, poznatim kao string. Većina uzoraka koristi normalne ASCII simbole, kao što su slova, cifre, interpunkcija ili drugi simboli, ali može koristiti i Unicode znakove kako bi odgovarao bilo kojoj drugoj vrsti teksta.
Sljedeća lista objašnjava meta znakove regularnih izraza koji se koriste za formiranje obrazaca.
.
-
Usklađuje bilo koji pojedinačni znak (osim novog reda)
[abcABC]
-
Uskladite bilo koji znak unutar zagrada
[^abcABC]
-
Uskladite bilo koji znak osim onih u zagradama
[a-z]
-
Uskladite bilo koji znak u rasponu
[^a-z]
-
Uskladite bilo koji znak osim onih u rasponu
sun|moon
-
Pronađite bilo koji od navedenih nizova
^
-
Početak reda
$
-
Kraj reda
Sve funkcionalnosti regularnih izraza mogu se implementirati i kroz grep
. Možete vidjeti da u gornjem primjeru riječ nije okružena dvostrukim navodnicima. Da bi se spriječilo da šel interpretira sam meta-znak, preporučuje se da složeniji uzorak bude između dvostrukih navodnika (" "). Za potrebe prakse, koristićemo dvostruke navodnike kada implementiramo regularne izraze. Ostali navodnici zadržavaju svoju normalnu funkcionalnost, kao što je objašnjeno u prethodnim lekcijama.
Sljedeći primjeri naglašavaju funkcionalnost regularnih izraza. Trebat će nam podaci unutar datoteke, stoga sljedeći skup komandi samo dodaje različite nizove u datoteku text.txt
.
$ echo "aaabbb1" > text.txt $ echo "abab2" >> text.txt $ echo "noone2" >> text.txt $ echo "class1" >> text.txt $ echo "alien2" >> text.txt $ cat text.txt aaabbb1 abab2 noone2 class1 alien2
Prvi primjer je kombinacija pretraživanja kroz datoteku bez i sa regularnim izrazima. Da bismo u potpunosti razumjeli regularne izraze, vrlo je važno pokazati razliku. Prva komanda traži tačan niz, bilo gdje u redu, dok druga komanda traži skupove znakova koji sadrže bilo koji od znakova između zagrada. Stoga su rezultati komandi različiti.
$ grep "ab" text.txt aaabbb1 abab2 $ grep "[ab]" text.txt aaabbb1 abab2 class1 alien2
Drugi set primjera pokazuje primjenu meta-znaka na početku i kraju reda. Veoma je važno navesti potrebu da se 2 znaka stave na pravo mjesto u izrazu. Kada se specificira početak reda, meta-znak mora biti prije izraza, dok, kada se specificira kraj reda, meta-znak mora biti iza izraza.
$ grep "^a" text.txt aaabbb1 abab2 alien2 $ grep "2$" text.txt abab2 noone2 alien2
Pored prethodno objašnjenih meta-karaktera, regularni izrazi takođe imaju meta-karaktere koji omogućavaju množenje prethodno specificiranog uzorka:
*
-
Nula ili više od prethodnog uzorka
+
-
Jedan ili više prethodnih obrazaca
?
-
Nula ili jedan od prethodnog uzork
Za meta-znakove množitelja, komanda ispod traži niz koji sadrži ab
, jedan znak i jedan ili više prethodno pronađenih znakova. Rezultat pokazuje da je grep
pronašao niz aaabbb1
, koji odgovara dijelu abbb
kao i abab2
. Budući da je znak +
proširen extended karakter regularnog izraza, moramo primijeniti opciju -E
komandi grep
.
$ grep -E "ab.+" text.txt aaabbb1 abab2
Većina meta-karaktera je razumljiva sama po sebi, ali mogu postati zeznuti kada se koriste po prvi put. Prethodni primjeri predstavljaju mali dio funkcionalnosti regularnih izraza. Isprobajte sve meta znakove iz gornje tabele da biste razumjeli više o tome kako funkcioniraju.
Vođene vježbe
Koristeći grep
i datoteku /usr/share/hunspell/en_US.dic
, pronađite linije koje odgovaraju sljedećim kriterijima:
-
Svi redovi koji sadrže riječ
cat
bilo gdje u redu. -
Svi redovi koji ne sadrže nijedan od sljedećih znakova:
sawgtfixk
. -
Svi redovi koji počinju sa bilo koja 3 slova i riječju
dig
. -
Svi redovi koji završavaju sa najmanje jednim
e
. -
Svi redovi koji sadrže jednu od sljedećih riječi:
org
,kay
ilituna
. -
Broj redova koji počinju sa jednim ili bez
c
nakon čega slijedi nizati
.
Istraživačke vježbe
-
Pronađite regularni izraz koji odgovara riječima u redu “Include” i ne odgovara onima u redu “Exclude”:
-
Include:
pot
,spot
,apot
Exclude:
potic
,spots
,potatoe
-
Include:
arp99
,apple
,zipper
Exclude:
zoo
,arive
,attack
-
Include:
arcane
,capper
,zoology
Exclude:
air
,coper
,zoloc
-
Include:
0th/pt
,3th/tc
,9th/pt
Exclude:
0/nm
,3/nm
,9/nm
-
Include:
Hawaii
,Dario
,Ramiro
Exclude:
hawaii
,Ian
,Alice
-
-
Koja se još korisna komanda obično koristi za pretraživanje unutar datoteka? Koje dodatne funkcionalnosti ima?
-
Razmišljajući o prethodnoj lekciji, upotrijebite jedan od primjera i pokušajte potražiti određeni obrazac unutar izlaza komande, uz pomoć
grep
.
Sažetak
U ovom labu ste naučili:
-
Regularni izrazi meta-znakovi
-
Kako kreirati obrasce sa regularnim izrazima
-
Kako pretraživati unutar datoteka
Komande korištene u ovoj vježbi:
grep
-
Pretražuje karakter ili niz unutar datoteke
Odgovor na vođene vježbe
Koristeći grep
i datoteku /usr/share/hunspell/en_US.dic
, pronađite linije koje odgovaraju sljedećim kriterijima:
-
Svi redovi koji sadrže riječ
cat
bilo gdje u redu.$ grep "cat" /usr/share/hunspell/en_US.dic Alcatraz/M Decatur/M Hecate/M ...
-
Svi redovi koji ne sadrže nijedan od sljedećih znakova:
sawgtfixk
.$ grep -v "[sawgtfixk]" /usr/share/hunspell/en_US.dic 49269 0/nm 1/n1 2/nm 2nd/p 3/nm 3rd/p 4/nm 5/nm 6/nm 7/nm 8/nm ...
-
Svi redovi koji počinju sa bilo koja 3 slova i riječju
dig
.$ grep "^...dig" /usr/share/hunspell/en_US.dic cardigan/SM condign predigest/GDS ...
-
Svi redovi koji završavaju sa najmanje jednim
e
.$ grep -E "e+$" /usr/share/hunspell/en_US.dic Anglicize Anglophobe Anthropocene ...
-
Svi redovi koji sadrže jednu od sljedećih riječi:
org
,kay
ilituna
.$ grep -E "org|kay|tuna" /usr/share/hunspell/en_US.dic Borg/SM George/MS Tokay/M fortunate/UY ...
-
Broj redova koji počinju sa jednim ili bez
c
nakon čega slijedi nizati
.$ grep -cE "^c?ati" /usr/share/hunspell/en_US.dic 3
Odgovor na istraživačke vježbe
-
Pronađite regularni izraz koji odgovara riječima u redu “Include” i ne odgovara onima u redu “Exclude”:
-
Include:
pot
,spot
,apot
Exclude:
potic
,spots
,potatoe
Odgovor:
pot$
-
Include:
arp99
,apple
,zipper
Exclude:
zoo
,arive
,attack
Odgovor:
p+
-
Include:
arcane
,capper
,zoology
Exclude:
air
,coper
,zoloc
Odgovor:
arc|cap|zoo
-
Include:
0th/pt
,3th/tc
,9th/pt
Exclude:
0/nm
,3/nm
,9/nm
Odgovor:
[0-9]th.+
-
Include:
Hawaii
,Dario
,Ramiro
Exclude:
hawaii
,Ian
,Alice
Odgovor:
^[A-Z]a.*i+
-
-
Koja se još korisna komanda obično koristi za pretraživanje unutar datoteka? Koje dodatne funkcionalnosti ima?
Komanda
sed
. Komanda može pronaći i zamijeniti znakove ili skupove znakova unutar datoteke. -
Razmišljajući o prethodnoj lekciji, upotrijebite jedan od primjera i pokušajte potražiti određeni obrazac unutar izlaza komande, uz pomoć
grep
.Uzeo sam jedan od odgovora iz istraživačkih vježbi i potražio red koji je čitao, pisao i izvršavao kao dozvole grupe. Vaš odgovor može biti drugačiji, ovisno o komandi koju ste odabrali i uzorku koji ste kreirali.
$ cat contents.txt | tr -s " " | grep "^....rwx"
Ova vježba vam je pokazala da
grep
također može primati unos od različitih komandi i može pomoći u filtriranju generisanih informacija.