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

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

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

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

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

PROGRAMOVÁNÍ V SHELLU

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

VISUAL BASIC. Práce se soubory

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

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

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

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

Regulární výrazy. Vzory

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

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

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

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

ČVUT FIT: BI-SKJ: Perl

Základy algoritmizace a programování

Řídicí struktury. alg3 1

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

Sada 1 - Základy programování

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

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

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

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

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

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ů

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

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

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

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

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

Nastroje na zpracovani textu:

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

Tahák na UOS 2008/2009

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

NPRG030 Programování I, 2010/11

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

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

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

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

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

Konečný automat. Jan Kybic.

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

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

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

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

Skripty - úvod. Linux - skripty 2

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

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

Regulární výrazy. jemný úvod. Miloslav Brada

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

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

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

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

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

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

Algoritmizace a programování

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

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

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

6 Příkazy řízení toku

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

Úvod do programování. Lekce 3

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

Programování. Bc. Veronika Tomsová

Úvod do programování. Lekce 1

Úvod do programování - Java. Cvičení č.4

AWK. Programovací jazyk textových manipulací

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

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

LINUX přesměrování a roury

10 Algoritmizace Příklad 2 Word 2007/ VBA

Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

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

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

- jak udělat konstantu long int: L long velka = 78L;

Úvod do UNIXu. Libor Forst

Kurz LSL skriptování. Shiny Iceberg 2009

Úvod do programovacích jazyků (Java)

2. lekce Algoritmus, cyklus Miroslav Jílek

Konstruktory překladačů

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

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

6. Příkazy a řídící struktury v Javě

--Různé-- Ovladače souborů Formáty Typeglob - záznamy z tabulky symbolů - různé typy objektů se stejným jménem: jmeno %jmeno,&jmeno...

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

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

ŘÍDÍCÍ STRUKTURY - PODMÍNKY

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

1.0 OS Unix Historie. Architektura. Zpracování příkazové řádky.

cyklus s daným počtem opakování cyklus s podmínkou na začátku (cyklus bez udání počtu opakování)

LinuxDays 2017 Ondřej Guth GNU grep LD 17 1 / 14

Transkript:

1 Přednáška 4 Regulární výrazy. Filtry grep, sed a awk.

2 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

3 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 I Pro definování vzoru se používají speciální znaky, jejichž význam je jiný než u shellu (na příkazové řádce je musíme uvádět v apostrofech). 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ř. [a,d,f], [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 4

5 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

6 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

7 Regulární výrazy II 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

8 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

9 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é jak u příkazu grep.

10 Regulární výrazy III 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 Příklady: egrep '^wo+' /usr/dict/words egrep '^wo?' /usr/dict/words egrep 'work(out man shop) /usr/dict/words

sed I 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] 11

12 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

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

14 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

15 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

16 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 I 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 }] 17

18 awk a nawk II Typy vzorů: Vzor Kdy se provede akce BEGIN před zpracováním první řádky ze vstupu END výraz začátek,konec 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)

19 awk a nawk III 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

20 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

21 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

22 awk a nawk IV Podmíněný příkaz 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

23 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

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