grep a regulární výrazy Josef Hajas hajasj1@fel.cvut.cz http://cs.felk.cvut.cz/~hajasj1/unix/ Vysázeno v LAT E Xu p.1/1
Co nás čeká grep: K čemu slouží? Jak používat? nejpoužívanější přepínače grepu regulární výrazy grepu mutace grepu a rozšířené regulární výrazy regulární výrazy v jiných programech Vysázeno v LAT E Xu p.2/1
grep Globaly search for Regular Expression and Print (skupina příkazů editoru ex) grep [options] regexp [file...] -i case Insensitive -c Count -l List file names only -v negace Výrazu Vysázeno v LAT E Xu p.3/1
grep Globaly search for Regular Expression and Print (skupina příkazů editoru ex) grep [options] regexp [file...] -i case Insensitive -c Count -l List file names only -v negace Výrazu Pouze GNU verze grepu -r hledej i v podadresářích Vysázeno v LAT E Xu p.3/1
grep: příklady $ cd /home/stud/hajasj1/grep/ grep jako filter: $ ps -a grep grep Vysázeno v LAT E Xu p.4/1
grep: příklady $ cd /home/stud/hajasj1/grep/ grep jako filter: $ ps -a grep grep grep jako vyhledávač: $ grep root syslog Vysázeno v LAT E Xu p.4/1
grep: příklady $ cd /home/stud/hajasj1/grep/ grep jako filter: $ ps -a grep grep grep jako vyhledávač: $ grep root syslog grep jako počítadlo: $ grep -c root syslog Vysázeno v LAT E Xu p.4/1
grep: příklady $ cd /home/stud/hajasj1/grep/ grep jako filter: $ ps -a grep grep grep jako vyhledávač: $ grep root syslog grep jako počítadlo: $ grep -c root syslog grep jako Mr Propper: $ grep -v root syslog > ~/syslog.new Vysázeno v LAT E Xu p.4/1
Magické regulární výrazy Proč regulární výrazy? Všechny konečné jazyky jsou regulární. Reg. výraz je úplný popis regulárního jazyka. Teoreticky dobře zvládnuté. Dostatečně obecné. Vysázeno v LAT E Xu p.5/1
Magické regulární výrazy Proč regulární výrazy? Všechny konečné jazyky jsou regulární. Reg. výraz je úplný popis regulárního jazyka. Teoreticky dobře zvládnuté. Dostatečně obecné. Společné rysy s expanzí shellu: [ ] Znak jedním z vyjmenovaných Vyřadí/zapne speciální význam znaku n Vysázeno v LAT E Xu p.5/1
Logika regulárních výrazů $ echo.*....skryty $ echo * grep.* syslog Vysázeno v LAT E Xu p.6/1
Logika regulárních výrazů $ echo.*....skryty $ echo * grep.* syslog $ ls -a grep.*....skryty syslog Vysázeno v LAT E Xu p.6/1
Logika regulárních výrazů $ echo.*....skryty $ echo * grep.* syslog $ ls -a grep.*....skryty syslog Znak následovaný iterací Vysázeno v LAT E Xu p.6/1
Metaznaky Zástupci znaků. Libovolný znak [ˆ ] Různý od uvedených nw (GNU) Znak slova: [a-za-z_0-9] Iterace předchozího znaku * Libovolný počet opakování n{m,nn} m až n výskytů n+ (GNU) Alespoň jedno opakování n? (GNU) Nanejvýš jeden Vysázeno v LAT E Xu p.7/1
Metaznaky Pozice výskytu ˆ Začátek řádku $ Konec řádku n< n> Hranice slova Pamět n( n) Skupina se zapamatováním n3 Třetí zapamatovaný Vysázeno v LAT E Xu p.8/1
Příklady použití metaznaků Zpět k našemu blackhat příteli: Jeho pokusy začaly cca v 21:00 Úspěšně se přihlásil ve 21:33 Apr 4 21:33:23 sunray1 sshd[1571]: [ID 800047 auth.info] Failed password for root from 62.245.93.38 port 55444 ssh2 $ grep -v ˆApr n{1,n}4 21:[0-3][0-9].*root syslog > ~/syslog.new Vysázeno v LAT E Xu p.9/1
Mutace grepu grep [-e regexp -f file] [file...] fgrep = grep -F fast grep hledaný výraz se interpretuje jako čistý text méně náročný na zdroje systému Vysázeno v LAT E Xu p.10/1
Mutace grepu grep [-e regexp -f file] [file...] fgrep = grep -F fast grep hledaný výraz se interpretuje jako čistý text méně náročný na zdroje systému egrep = grep -E extended regexp Vysázeno v LAT E Xu p.10/1
Mutace grepu grep [-e regexp -f file] [file...] fgrep = grep -F fast grep hledaný výraz se interpretuje jako čistý text méně náročný na zdroje systému egrep = grep -E extended regexp agrep approximate grep Vysázeno v LAT E Xu p.10/1
Rozšířené regulární výrazy Místo znaku tu může vystupovat celý podvýraz Změny oproti základním regulárním výrazům () Vytyčení podvýrazu pro iterace nn Zpětná reference zde není možná {m,n} m až n výskytů + Alespoň jedno opakování? Nanejvýš jeden Logické nebo Vysázeno v LAT E Xu p.11/1
Rozšířené regulární výrazy: příklad $ egrep ˆApr +4 21:[0123][0-9] (.*blackhat.*62.245.93.38) syslog Apr 4 21:04:07 sunray1 su: [ID 810491 auth.crit] su root failed for blackhat on /dev/pts/19... Apr 4 21:33:23 sunray1 sshd[1571]: [ID 800047 auth.info] Failed password for root from 62.245.93.38 port 55444 ssh2... Vysázeno v LAT E Xu p.12/1
Regulární výrazy za hranicemi grepu Jednoznakové regexp: sed, vi Vysázeno v LAT E Xu p.13/1
Regulární výrazy za hranicemi grepu Jednoznakové regexp: sed, vi :1,$s/ˆn(.*n)$/[BOLD]n1[n/BOLD]/c Vysázeno v LAT E Xu p.13/1
Regulární výrazy za hranicemi grepu Jednoznakové regexp: sed, vi :1,$s/ˆn(.*n)$/[BOLD]n1[n/BOLD]/c Rozšířené regexp: awk určují řádky, kterých se operace týká používají se v nahrazování Vysázeno v LAT E Xu p.13/1
Regulární výrazy za hranicemi grepu Jednoznakové regexp: sed, vi :1,$s/ˆn(.*n)$/[BOLD]n1[n/BOLD]/c Rozšířené regexp: awk určují řádky, kterých se operace týká používají se v nahrazování V perlu - zabudováno do syntaxe $radek =~s/&[ˆ;]*;//g; if ($radek =~/<link>(.*?)<link>/) print("<a href="$1">$1</a><br>nn"); Vysázeno v LAT E Xu p.13/1
Reference Bezva věc tyhle regulární výrazy, kde najdu víc? Pavel Satrapa: Regulární výrazy http://www.kit.vslib.cz/ satrapa/docs/regvyr/regvyr.pdf Jeffrey E. F. Friedl: Mastering Regular Expressions http://marecek.kup.to/trade/productview/10650/369/ Visual regexp: program pro odlazování regulárních výrazů http://laurent.riesterer.free.fr/regexp/ Vysázeno v LAT E Xu p.14/1