Regulární výrazy. Filtry grep, sed a awk.

Podobné dokumenty
Přednáška 4. Regulární výrazy. Filtry grep, sed a awk. Úvod do Operačních Systémů Přednáška 4

A7B38UOS Úvod do operačních systémů. 6. Cvičení. Příkazy sed a awk

Regulární výrazy a grep

Program grep. predn_05.doc

awk programovatelný filtr

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

more Program se zastaví vždy po vypsání jedné stránky textu. Ukončení Ctrl+C less Umožňuje pohybovat se v souboru dopředu i dozadu.

grep a regulární výrazy

Programovací jazyk Pascal

ČVUT FIT: BI-SKJ: Perl

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Regulární výrazy. Definice Množina regulárních výrazů nad abecedou Σ, označovaná RE(Σ), je definována induktivně takto:

Úvod do Operačních Systémů

Automaty a gramatiky(bi-aag) Motivace. 1. Základní pojmy. 2 domácí úkoly po 6 bodech 3 testy za bodů celkem 40 bodů

Přednáška 8. Proměnné. Psaní a ladění skriptů. Parametry skriptu. Vstup a výstup. Konfigurační soubory shellu. Úvod do Operačních Systémů Přednáška 8

Úvod do UNIXu. Okruh č. 4 - vi, regulární výrazy, grep a sed. Jakub Galgonek. verze r2. inspirováno materiály Davida Hokszy

Proměnné a parametry. predn_08.odt :00:38 1

PROGRAMOVÁNÍ V SHELLU

VISUAL BASIC. Práce se soubory

Operační systémy. Cvičení 4: Programování v C pod Unixem

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

C2110 Operační systém UNIX a základy programování

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

BASH. Kouzla s příkazovou řádkou. Petr Koloros

Úloha 3 editor a skripty. připojte se vzdáleně na dray6.feld.cvut.cz heslo získáte na adrese

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

Regulární výrazy. Vzory

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

WSH Windows Script Hosting. OSY 2 Přednáška číslo 2 opravená verze z

Začínáme vážně programovat. Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

Úvod do Operačních Systémů

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

Základy algoritmizace a programování

Konečný automat. Jan Kybic.

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

Řídicí struktury. alg3 1

Automaty a gramatiky(bi-aag) Formální překlady. 5. Překladové konečné automaty. h(ε) = ε, h(xa) = h(x)h(a), x, x T, a T.

Sada 1 - Základy programování

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Rozšíření ksh vůči sh při práci s proměnnými

Domácí příprava k předmětu YD38UOS Úloha 10 práce s lokálními soubory pokračování

Inovace bakalářského studijního oboru Aplikovaná chemie

Tvorba výrazu: speciální znaky shellu se uvádějí do apostrofů jednotlivé části výrazu se oddělují mezerou

NPRG030 Programování I, 2017/18 1 / :22:16

Funkce, podmíněný příkaz if-else, příkaz cyklu for

2. lekce Algoritmus, cyklus Miroslav Jílek

Obsah. Začínáme programovat v Ruby on Rails 9. Úvod Vítejte v Ruby 15. O autorovi 9 Poděkování 9

Úvod do programovacích jazyků (Java)

Skripty - úvod. Linux - skripty 2

X36UNX 16. Numerické výpočty v sh příkazy expr, bc, dc. Zdeněk Sojka

Tahák na UOS 2008/2009

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

NPRG030 Programování I, 2010/11

Větvení a cykly. Úvod do programování 1 Tomáš Kühr

Sekvenční a podmíněné provádění

10 Algoritmizace Příklad 2 Word 2007/ VBA

Cykly. Základy programování 1 Martin Kauer (Tomáš Kühr)

NPRG030 Programování I, 2016/17 1 / :58:13

Programování v jazyce JavaScript

Poslední aktualizace: 14. října 2011

Tahák na UOS 2008/2009 Přehled (zkrácená verze)

PSK3-9. Základy skriptování. Hlavička

Algoritmizace prostorových úloh

Paměť počítače. alg2 1

Přednáška 5. Identita uživatelů, procesů a souborů. Přístupová práva a jejich nastavení. Úvod do Operačních Systémů Přednáška 5

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole

ANOTACE vytvořených/inovovaných materiálů

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

AWK. Programovací jazyk textových manipulací

Nastroje na zpracovani textu:

Střední odborná škola a Střední odborné učiliště, Hořovice

PHP - úvod. Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky.

Úvod do Matlabu. Praha & EU: Investujeme do vaší budoucnosti. 1 / 24 Úvod do Matlabu

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

6 Příkazy řízení toku

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Úvod do databázových systémů

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13

Základní příkazy OS UNIX

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

LINUX přesměrování a roury

Úvod do programování 6. hodina

Činnost: 1) Vyhodnotí se výraz E. 2) Jeho hodnota se uloží do proměnné V.

Algoritmizace a programování

Kurz LSL skriptování. Shiny Iceberg 2009

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti

Úvod do programovacích jazyků (Java)

1-Úvod. Automaty a gramatiky(bi-aag) Plán přednášky. 8. Regulární výrazy - aplikace

Přednáška. Správa paměti II. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Lexikální analýza Teorie programovacích jazyků

Basic256 - úvod do programování Příklady. ing. petr polách

Úvod do UNIXu. Libor Forst

Vyhledávání v textu. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava

while cyklus s podmínkou na začátku cyklus bez udání počtu opakování while podmínka příkazy; příkazy; příkazy; end; % další pokračování programu

Transkript:

Přednáška 5 Regulární výrazy. Filtry grep, sed a awk. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2011 Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti

Matematický formalismus pro popis slov/vět jazyků. Regulární výrazy Množina regulárních výrazů RV(Σ) nad konečnou neprázdnou abecedou Σ je nejmenší množina slov nad abecedou { a, a2, K,,ø, ε,, +,,(,)} která: 1 a n obsahuje pro každý symbol a ze Σ platí, že RV(Σ) obsahuje výraz a α α Příklad: { ø,ε} ( Σ) ( α + ) RV( Σ) ( Σ) ( α ) RV( Σ) ( Σ) α RV( Σ), β RV β, β RV β α RV ( a b) + ( c + d ) e ) Teorie jazyků se uplatňuje nejen v lingvistice, ale i v teorii programovacích jazyků, počítačové grafice, pro popis a konstrukcí HW, v biologii...

grep grep [přepínače] vzor [soubory] Implicitně vypíše na standardní výstup řádky, které obsahují zadaný vzor. Vzor může být definován základním regulárním výrazem (man -s 5 regex). Podporuje znaky:., *, ^, $, \<, \>,\, [, ], \{, \}, Název grep je zkratka pro skupinu příkazů editoru ex (globally search for regular expression and print result). -i nerozlišuje malá a velká písmena -v vypíše na standardní výstup řádky, které neobsahují zadaný vzor -c vypíše pouze počet odpovídajících řádek -l vypíše pouze jména souborů, které odpovídající řádky obsahují -n vypíše odpovídající řádky a jejich pořadové číslo v souboru

Příklady grep 'The' /etc/ssh/ssh_config grep 'the' /etc/ssh/ssh_config grep -i 'The' /etc/ssh/ssh_config grep -ci 'the' /etc/ssh/ssh_config grep -ni 'the' /etc/ssh/ssh_config grep -l 'kill' /etc/init.d/* grep root /etc/group grep -v root /etc/group

Regulární výrazy grep Pro definování vzoru se používají speciální znaky, jejichž význam je jiný než v shellu, musíme je před ním proto chránit (apostrofy, \). Symbol Význam. jeden jakýkoliv znak znak* žádný nebo libovolných počet výskytů předchozího znaku [ ] jeden znak z množiny/intervalu (např. [adf], [a-h]) [^ ] jeden libovolný znak mimo znaků z množiny/intervalu ^ začátek řádky $ konec řádky \< začátek slova \> konec slova \znak ruší speciální význam následujícího znaku

Příklady ls -l grep -c '^l' ypcat passwd grep '/bin/ksh$' grep 'the' /etc/ssh/ssh_config grep '\<the\>' /etc/ssh/ssh_config grep 'bag' /usr/dict/words grep '^bag' /usr/dict/words grep 'bag$' /usr/dict/words grep '^bag$' /usr/dict/words

Příklady grep '^b[aeiou]g' /usr/dict/words grep '^b[^aeiou]g' /usr/dict/words grep '^b.g$' /usr/dict/words grep '^woo*' /usr/dict/words grep '^wood' /usr/dict/words grep '^wood.*d' /usr/dict/words grep '^wood.*d$' /usr/dict/words

Regulární výrazy grep Symbol znak\{m\} znak\{m, \} znak\{m, n\} Význam právě m výskytů předchozího znaku nejméně m výskytů předchozího znaku m až n výskytů předchozího znaku Příklady: grep '^[A-Z]' /usr/dict/words grep '^[A-Z][A-Z]' /usr/dict/words grep '^[A-Z]\{2\}' /usr/dict/words grep '^[A-Z]\{2,3\}' /usr/dict/words

fgrep fgrep [přepínače] vzor [soubory] Implicitně vypíše na standardní výstup řádky, které obsahují zadaný vzor. Vzor může být definován pouze jako obyčejný řetězec. Příkaz je rychlejší než grep a egrep. Přepínače jsou podobné jak u příkazu grep. Příklady: fgrep 'root' /etc/group fgrep '^root' /etc/group

egrep egrep [přepínače] vzor [soubory] Implicitně vypíše na standardní výstup řádky, které obsahují zadaný vzor. Vzor může být definován rozšířeným regulárním výrazem (man -s 5 regex). Nepodporuje znaky: \(, \), \n, \<, \>, \{, \} Navíc podporuje znaky: +,?,, (, ) Přepínače jsou podobné jako u příkazu grep.

Regulární výrazy egrep Symbol znak+ znak? RE1 RE2 (RE) Význam jeden nebo libovolných počet výskytů předchozího znaku žádný nebo jeden výskyt předchozího znaku RE1 nebo RE2 označení reg. podvýrazu RE Příklady: egrep '^wo+' /usr/dict/words egrep '^wo?' /usr/dict/words egrep 'work(out man shop) /usr/dict/words

sed sed [přepínače] ' příkaz ' [soubory] sed [přepínače] -f skript [soubory] Stream editor - edituje neinteraktivně jeden nebo více souborů. Jednotlivé řádky jsou čteny ze standardního vstupu nebo ze souboru, provádí nad nimi jednotlivé příkazy a vypíší se na standardní výstup. -n potlačí implicitní kopírování vstupu na výstup (to co se má vytisknou musí být explicitně určeno příkazem p [print]) -f skript soubor skript musí obsahovat seznam příkazů: [adresa1 [,adresa2]] příkaz [parametry]

Příklady $ cat data.txt Jan Novak M Praha 15000 26 Jiri Prasek M Brno 22000 38 Jitka Mala Z Plzen 23000 32 Petra Farska Z Praha 27000 27 Pavel Kulik M Brno 24000 31 $ sed '' data.txt Jan Novak M Praha 15000 26 Jiri Prasek M Brno 22000 38 Jitka Mala Z Plzen 23000 32 Petra Farska Z Praha 27000 27 Pavel Kulik M Brno 24000 31 $ sed -n '' data.txt

sed Příkazy d(delete) p(print) s/re1/re2/volby zruší řádku vypíše řádku na výstup nahradí text, který odpovídá vzoru RE1, řetězcem RE2

Příklady $ sed -n '2,4p' data.txt Jiri Prasek M Brno 22000 38 Jitka Mala Z Plzen 23000 32 Petra Farska Z Praha 27000 27 $ sed -n '4,$p' data.txt Petra Farska Z Praha 27000 27 Pavel Kulik M Brno 24000 31

Příklady $ sed -n '/^J/p' data.txt Jan Novak M Praha 15000 26 Jiri Prasek M Brno 22000 38 Jitka Mala Z Plzen 23000 32 $ sed '/^J/d' data.txt Petra Farska Z Praha 27000 27 Pavel Kulik M Brno 24000 31 $ sed -n '/38$/,/27$/p' data.txt Jiri Prasek M Brno 22000 38 Jitka Mala Z Plzen 23000 32 Petra Farska Z Praha 27000 27

Příklady $ sed 's/praha/louny/' data.txt Jan Novak M Louny 15000 26 Jiri Prasek M Brno 22000 38 Jitka Mala Z Plzen 23000 32 Petra Farska Z Louny 27000 27 Pavel Kulik M Brno 24000 31 $ sed 's/[0-9][0-9]$/& let/' data.txt Jan Novak M Praha 15000 26 let Jiri Prasek M Brno 22000 38 let Jitka Mala Z Plzen 23000 32 let Petra Farska Z Praha 27000 27 let Pavel Kulik M Brno 24000 31 let

awk a nawk awk [přepínače] [program] [prom=hod...] [soubory] Programovatelný filtr vytvořený autory: Aho, Weinberger, Kernighan. Původní verze se jmenovala awk, rozšířená verze pak nawk (na některých systémech lze rozšířenou verzi najít pod původním názvem awk). Jednotlivé řádky jsou čteny ze standardního vstupu nebo ze souboru, pokud odpovídají zadanému vzoru, provede se nad nimi příslušný program. Pokud není vzor specifikován, provede se program nad každou řádkou. Na řádku se pohlíží jako na posloupnost položek $1, $2,...,$NF ($0 = celá řádka). Implicitním oddělovačem položek je mezera/tabelátor (lze změnit přepínačem F nebo proměnnou FS). Struktura příkazu programu: [vzor] [{ akce }]

awk a nawk Typy vzorů: Vzor BEGIN END výraz začátek,konec Kdy se provede akce před zpracováním první řádky ze vstupu po zpracováním poslední řádky ze vstupu pro řádky vyhovující danému výrazu od první řádky splňující výraz začátek až do první řádky splňující výraz konec Typy výrazů: regulární výraz (ve formátu pro egrep) logický výraz (0 nebo prázdný řetězec = false, jinak true)

awk a nawk Logické výrazy tvořeny pomocí operátorů jako v jazyce C relační operátory: >, >=, <, <=, ==,!=, ~,!~ (řetězec odpovídá/neodpovídá danému vzoru) matematické operátory: +, -, *, /, %, ^, ++, -- Logické operátory: &&,,! Proměnné deklarují se použitím použití je podobné jako v jazyce C Některé předefinované proměnné $n hodnota n-té položka z aktuálního řádku ( $0 = celá řádka ) NF počet položek v aktuálním řádku NR pořadová číslo aktuální řádky FS vstupní oddělovač položek na řádce OFS výstupní oddělovač položek na řádce

Příklady $ nawk '{print $2, $1}' data.txt $ nawk '{print $2 \t $1}' data.txt $ ypcat passwd nawk -F: '{print $3, $1, $5}' $ nawk '/^J/ { print $0 }' data.txt $ nawk '{ printf("%d: %s\n", NR, $0) }' data.txt

Příklady p1.awk { c=c+$5; print $0 } END { printf("------------------------------------------\n"); printf("prumerny plat %d\n", c/nr) } $ nawk -f p1.awk data.txt Jan Novak M Praha 15000 26 Jiri Prasek M Brno 22000 38 Jitka Mala Z Plzen 23000 32 Petra Farska Z Praha 27000 27 Pavel Kulik M Brno 24000 31 ------------------------------------------ Prumerny plat 22200

Podmíněný příkaz awk a nawk if (výraz) { příkazy1} [ else { příkazy2} ] Cykly for ( i=min; i<=max; i++ ) { příkazy } for ( j in pole ) { příkazy } while ( výraz ) { příkazy } do { příkazy } while ( výraz ) break # předčasné ukončení cyklu continue # předčasné ukončení aktuální iterace cyklu

Příklady p2.awk { } for (i=nf; i>=1; i--) { printf("%s\t", $i) } printf("\n") $ nawk -f p2.awk data.txt 26 15000 Praha M Novak Jan 38 22000 Brno M Prasek Jiri 32 23000 Plzen Z Mala Jitka 27 27000 Praha Z Farska Petra 31 24000 Brno M Kulik Pavel

awk a nawk Předdefinované funkce printf("řetězec" [,hodnoty]) sin(), sqrt(), log(), exp(),... system() length(), match(), split(), substr(), sub(),... tolower(), toupper(),...