Zpracování textu Regulární výraz Pro manipulaci s textem je v operačním systému UNIX k dispozici mimo editory řada filtrů, s jejichž pomocí lze upravovat.

Slides:



Advertisements
Podobné prezentace
Standardní knihovní funkce pro práci s textovými řetězci
Advertisements

Množiny Přirozená čísla Celá čísla Racionální čísla Komplexní čísla
Pro začátek něco lehčího
VISUAL BASIC Práce s řetězci Použitá literatura: Kvoch: Visual Basic 4.
Vlastní skript může být umístěn: v hlavičce stránky v těle stránky
Programovací jazyk Perl
Operační systém UNIX Soubory a adresářová struktura Roman Danel
Pascal - příklady.
Programování funkcí v Excelu
HYPERTEXT PREPROCESSOR. JAZYK PHP. Jazyk PHP (Hypertext PreProcessor) je intepretovaný jazyk určený pro web. Je celkem jednoduchý, snadno přenositelný.
Opakování Co je výsledkem následujícího prográmku? my $a="kol"; my $b="o"; $a.= $b; $b.= $a; print "a = $a, b = $b\n"; Vkládání speciálních znaků? Uvozovací.
Cvičení Úloha 1: Rozhodněte zda posloupnost znaků v poli délky n tvoří palindrom (slovo, které je stejné při čtení zprava i zleva). Př.: [a,l,e,l,a] [a,n,n,a]
VISUAL BASIC Práce se soubory.
Architektury a techniky DS Tvorba efektivních příkazů I Přednáška č. 3 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Zpracování textu Programovatelný filtr awk Jedná se o programovací jazyk (?), který pracuje se záznamy a poli, je pomalejší než vyšší programovací jazyky,
Shell jako programovací jazyk Příkazy větvení Dva operátory pro tvorbu podmíněných příkazů if, case Obecný formát: if podmínka then příkaz1 [else příkaz2]
( vstupy a výstupy v Matlabu na konzolu [ do Command Windows]
MATLAB® ( část 3 - scripty).
Vzdělávací materiál / DUMVY_32_INOVACE_02B14 Příkazový řádek: obsah souborů PŘÍKLADY AutorIng. Petr Haman Období vytvořeníLeden 2013 Ročník / věková kategorie3.
PHP PHP – základy syntaxe (část 1) - 03 Mgr. Josef Nožička IKT PHP
Vzdělávací materiál / DUMVY_32_INOVACE_02B10 Příkazový řádek: úvod AutorIng. Petr Haman Období vytvořeníListopad 2012 Ročník / věková kategorie3. ročník.
Úpravy algebraických výrazů
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Informatika I 3. přednáška
Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
MATLAB LEKCE 1.
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
Abeceda a formální jazyk
PHP – Základy programování
KOMBINAČNÍ LOGICKÉ FUNKCE
Úkol Vytvořit soubor – touch file Zpřístupnit ho ostatním studentům, ale ne mě (uživatel tupost) – lze to? Na čem to závisí? – závisí to na tom, zda jsou.
JavaScript Podmínky, cykly a pole.
Cvičení.
3. Příkazy  Příkazy dělíme na jednoduché a strukturované.  Jednoduché příkazy - žádnou jejich dílčí částí neni příkaz - přiřazovací, vstupu a výstupu,
Využití vzorců a funkcí k úpravám v textu
Proměnná typu "pole" Mezi proměnné typu "pole" patří všechny superglobální proměnné. Mezi proměnné typu "pole" patří všechny superglobální proměnné. To.
Programovací jazyk PASCAL
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Cvičení č. 8 Pokročilé regulární výrazy - na co je třeba dát pozor David Chudán Upravil D. Pejčoch.
UNIX — doplňky Informatika pro ekonomy II přednáška 9.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
Základy syntaxe jazyka PHP PHP JE TECHNOLOGIE BĚŽÍCÍ NA SERVERU. PHP JE TECHNOLOGIE BĚŽÍCÍ NA SERVERU. Typický PHP skript obsahuje: Typický PHP skript.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
PROGRAMOVÁNÍ V PHP PERSONAL HOME PAGES CYKLY V PHP.
STRING A UKAZATELE. Co to je řetězec? Řetězec v Javě je samostatný objekt. Je konstantní, co znamená, že jednou vytvořený řetězec nelze změnit. Chceme-li.
Problémy s češtinou České znaky se standardně nepovažují za alfanumerické znaky (\w) Vadí to při třídění vyhodnocování regulárních výrazů Je třeba použít.
Úvod do UNIXu (4 th round) David Hoksza (většina sekce o vi a obrázek na slidu 7 převzat od Libora Forsta –
Operační systém GNU Linux Příkazy pro správu procesů.
JUI přednáška Vstup a výstup, cykly RNDr. Jiří Dvořák, CSc.
Řetězce String. Co je to řetězec Jako řetězec označujeme pojmenovanou skupinu libovolných znaků Deklarujeme jej pomocí příkazu Délka řetězce není v tomto.
ACCESS DOTAZY Ing. Jana Horáková IKT MS Office
Podprogramy (subroutines) Pojmenované kousky programu, které –tvoří logicky ucelené části –se v programu opakují Jsou zapsány na jednom místě a v případě.
HYPERTEXT PREPROCESSOR. JAZYK PHP. VYUŽITÍ JAZYKA Programování dynamických internetových stránek a webových aplikací vytvoření šablony webu kniha návštěv.
Sed O co jde Regulární výrazy Příkazy Adresování Příklady Michal Trs,
PHP Stručný úvod.
Výpočetní technika a algoritmizace I Základní příkazy příkazového řádku v systému Windows a unixových systémech.
Programování KONSTANTY, ČTENÍ PO JEDNOM ZNAKU GETCHAR() FORMÁTOVANÝ VÝSTUP POMOCÍ PRINTF, VÝVOJOVÉ DIAGRAMY, CYKLY.
Algoritmizace a programování
Definiční obor a obor hodnot
Výukový materiál zpracován v rámci projektu
Výukový materiál zpracován v rámci projektu
Linux - skripty Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Libor Otáhalík. Dostupné z Metodického portálu ISSN: 
Úvod do programování 6. hodina
Algoritmizace a programování
Funkce výstupu (2) Funkce printf: deklarována v: stdio.h
Databázové systémy a SQL
Algoritmizace a datové struktury (14ASD)
Command line nástroje Jednoúčelové, ale mocné nástroje pro transformace textu Jak získat: Linux (a Mac) – součást operačního systému Windows – musí se.
Transkript prezentace:

Zpracování textu Regulární výraz Pro manipulaci s textem je v operačním systému UNIX k dispozici mimo editory řada filtrů, s jejichž pomocí lze upravovat obsah textových souborů. Ve všech těchto programech hraje významnou roli pojem regulární výraz. Je to syntaxe, která umožňuje specifikovat mnoho různých řetězců. Nejjednodušším regulárním výrazem je samotný řetězec: abcd1234 Takovému regulárnímu výrazu odpovídá jediný odpovídající řetězec: abcd1234 Pomocí operátorů můžeme rozšířit oblast platnosti regulárního výrazu. Jedním z nich je operátor. (tečka). Nahrazuje v regulárním výrazu libovolný znak.

Regulární výraz Odpovídající řetězec a.cd1234aacd1234a1cd1234 …a!cd1234 azcd aAcd1234 … aZcd1234 Operátor * zastupuje libovolněnásobný výskyt znaku před operátorem. ab*a(nulový počet znaků b) ab(jeden znak b) abb abbb abbbb... Zpracování textu

Spojením operátorů pro libovolný znak a jeho opakování vznikne operátor.*, který zastupuje libovolný řetězec. x.*všechny řetězce začínající znakem x Operátor [] (hranaté závorky) zastupuje kterýkoli znak uvedený mezi hranatými závorkami. [sSt]elesele Sele tele Operátor - (pomlčka) mezi hranatými závorkami vytváří interval v rámci ASCII posloupnosti znaků. [0-9] libovolná číslice[A-Za-z] libovolné písmeno Zpracování textu

Operátor ^ označuje začátek řádku, operátor $ označuje konec řádku. ^x.*y$ jakýkoli řádek začínající na x a končící y Pokud je potřeba uvést v regulárním výrazu některý ze speciálních znaků., *, [, ], ^, \ nebo $, je potřeba je opatřit prefixem \. Jinou možností je uzavřít regulární výraz do apostrofů. ^\[.*$řádky, které začínají znakem [ Regulární výrazy jsou klíčem ke zvládnutí nástrojů ke zpracování textu (grep, sed, awk, …), editorů a používají se i v shellu. Syntaxe regulárního výrazu v shellu se liší od syntaxe použité v prostředcích zpracování textu. Zpracování textu

Záznam, pole, oddělovač Textové soubory jsou načítány a zpracovávány po záznamech (řádek). Oddělovačem záznamů je znak LF (line feed, ASCII 10), záznamy se člení na pole (slovo), oddělovačem polí jsou mezery a tabelátory. Filtry pro zpracování textu umožňují oddělovače předefinovat. ymanak06:x:2208:30:Jiri Manak 4 46:/usr/people/students/ymanak06:/bin/ksh ykorab00:x:2195:30:Pavel Korabecny 5 48:/usr/people/students/ykorab00:/bin/ksh Porovnávání souborů Pro porovnávání souborů jsou k dispozici příkazy cmp (libovolné soubory) a diff (textové soubory). Příkaz cmp hlásí první první znak, v kterém se soubory liší, s přepínačem -l vypíše pro každý odlišný znak trojici čísel. První je pořadové číslo znaku, druhé je kód znaku v prvním souboru a třetí je kód znaku ve druhém souboru. Pokud jsou oba soubory shodné, nevypisuje cmp žádnou zprávu. Příkaz diff vypisuje všechny řádky, v nichž se soubory liší.

Zpracování textu $ cat soubor1 Prvni radek druhy radek Treti radek Dalsi radek $ cat soubor2 Prvni radek Druhy radek Treti radek Jiny radek $ cmp soubor1 soubor2 soubor1 soubor2 differ: char 13, line 2 $ $ cat soubor1 Prvni radek druhy radek Treti radek Dalsi radek $ cat soubor2 Prvni radek Druhy radek Treti radek Jiny radek $ diff soubor1 soubor2 2c2 < druhy radek --- > Druhy radek 4c4 < Dalsi radek --- > Jiny radek $ n1 a n2, n3 za řádek n1 prvního souboru je potřeba připsat řádky n2 až n3 druhého souboru n1, n2 d n3 řádky n1 až n2 prvního souboru je třeba smazat n1, n2 c n3, n4 řádky n1 až n2 prvního souboru je třeba změnit tak, aby byly shodné s řádky n3 až n4 druhého souboru

Zpracování textu $ cat soubor1 Prvni radek Druhy radek Treti radek Jiny radek $ cat soubor2 Prvni radek druhy radek TretI radek Jiny radek $ cmp -l soubor1 soubor $

Zpracování textu S přepínačem -e vytváří příkaz diff přímo scénář využitelný editorem ed, který změní první soubor na druhý. $ cat soubor1 Prvni Radek Jedna radek treti radek jiny radek $ cat soubor2 Prvni radek Druhy radek Treti radek Jiny radek $ diff -e soubor1 soubor2 > ed.scenar $ cat ed.scenar 1,4c Prvni radek Druhy radek Treti radek Jiny radek. $ $ (cat ed.scenar; echo w soubor3) | ed soubor $ diff soubor2 soubor3 $ $ cat ed.scenar 1,4c Prvni radek Druhy radek Treti radek Jiny radek. w $ $ cat ed.scenar | ed soubor $ diff soubor1 soubor2 $ cat > ed.scenar

Zpracování textu Prohledávání souboru Pro prohledávání souborů se používá filtr grep ( modifikace fgrep a egrep). Filtr prohledává určené soubory a hledá v nich řádky, které obsahují zadaný regulární výraz. Nalezené řádky vypisuje na standardní výstup. Obecný formát: grep [-přepínače] regulární_výraz seznam_souborů Regulární výraz je zadáván v syntaxi obvyklé pro editor ed. -vtiskne jen řádky, které neobsahují hledaný řetězec -iignoruje při hledání rozdíl mezi malými a velkými písmeny -npíše k výstupním řádkům jejich pořadové číslo v souboru fgrep - nepřipouští regulární výraz, rychlejší algoritmus egrep - rozšířený grep, doplňuje operátory pro vytváření regulárního výrazu + - jeden nebo několik výskytů předcházejícího znaku | - volba mezi dvěma výrazy ? - žádný nebo jednonásobný výskyt předcházejícího znaku

$ cat grep Tento text slouzi k priblizeni funkce prikazu grep $ cat grep1 Prikaz grep slouzi k vyhledavani retezcu v zadanem textu $ grep t.x grep* grep:Tento text grep1:v zadanem textu $ fgrep t.x grep* $ fgrep tex grep* grep:Tento text grep1:v zadanem textu $ $ cat grep Tento text slouzi k priblizeni funkce prikazu grep $ cat grep1 Prikaz grep slouzi k vyhledavani retezcu v zadanem textu $ egrep 'ret|rep' grep* grep:prikazu grep grep1:Prikaz grep grep1:retezcu $ $ cat egrep ahoj jak se mas? !gfgfgfg 8dobry den! & nnnnnn $ egrep -n ! egrep 2:!gfgfgfg kjkjk 4:8dobry den! $ egrep -n '^!' egrep 2:!gfgfgfg kjkjk $

Zpracování textu Třídění souborů Třídění se provádí příkazem sort, probíhá podle ASCII kódu, pokud potřebujeme třídit podle velikosti čísel, je potřeba jej spustit s přepínačem -n. $ cat cisla $ $ sort cisla $ $ sort -n cisla $

Zpracování textu Implicitně třídí sort podle prvních (druhých, třetích, …) znaků. Pomocí argumentů ve tvaru +n, -n lze příkazu sort předepsat, které znaky má uvažovat při třídění. Argument -n neznamená, že pro třídění bude použito pouze n+1 pole, ale n+1 a další pole. Pokud chceme určit, podle kterých polí bude třídění probíhat, musíme použít argument -n. Argumenty +n a -n mohou mít tvar pole.znak. Jiný než implicitní oddělovač polí se zadává pomocí přepínače -t. -t zadání oddělovače -r reverzní třídění -f ignoruje velikost písmen $ cat seznam Pilny Oto vedouci Zaruba Zdenek manager Pritulny Ivo referent Bezzemek Jan referent Kytlink Zdenek referent Horn Rene skladnik $ $ sort seznam Bezzemek Jan referent Horn Rene skladnik Kytlink Zdenek referent Pilny Oto vedouci Pritulny Ivo referent Zaruba Zdenek manager $

Zpracování textu $ cat seznam Pilny Oto vedouci Zaruba Zdenek manager Pritulny Ivo referent Bezzemek Jan referent Kytlink Zdenek referent Horn Rene skladnik $ sort +1 seznam Pritulny Ivo referent Bezzemek Jan referent Pilny Oto vedouci Horn Rene skladnik Zaruba Zdenek manager Kytlink Zdenek referent $ $ sort seznam Pritulny Ivo referent Bezzemek Jan referent Pilny Oto vedouci Horn Rene skladnik Kytlink Zdenek referent Zaruba Zdenek manager $

Zpracování textu $ sort +2.2 seznam Zaruba Zdenek manager Pilny Oto vedouci Kytlink Zdenek referent Bezzemek Jan referent Pritulny Ivo referent Horn Rene skladnik $ $ sort -t: +4 uziv yhrusk01:x:2267:30:David Hruska 4 46:/usr/people/students/yhrusk01:/bin/ksh yschac00:x:2268:30:David Schachl 4 47:/usr/people/students/yschac00:/bin/ksh ykosou01:x:2263:30:Frantisek Kosour 4 48:/usr/people/students/ykosou01:/bin/ksh yceplm00:x:2264:30:Jaroslav Cepl 2 B31:/usr/people/students/yceplm00:/bin/ksh ycasla01:x:2266:30:Jiri Caslava 4 46:/usr/people/students/ycasla01:/bin/ksh ymanak06:x:2208:30:Jiri Manak 4 46:/usr/people/students/ymanak06:/bin/ksh ychyle00:x:2265:30:Ladislav Chylek 4 46:/usr/people/students/ychyle00:/bin/ksh ykorab00:x:2195:30:Pavel Korabecny 5 48:/usr/people/students/ykorab00:/bin/ksh ybilek03:x:2262:30:Petr Bilek 4 48:/usr/people/students/ybilek03:/bin/ksh ycacka00:x:2261:30:Petr Cacka 4 49:/usr/people/students/ycacka00:/bin/ksh sitea:x:2269:30:vyukovy ucet pro site:/usr/people/students/sitea:/bin/ksh $

Zpracování textu Příkazy cut a paste Pomocí příkazu cut můžeme z každého řádku souboru vzít pouze jeho část. Implicitním oddělovačem polí je tabelátor (!). Pomocí přepínače -f můžeme určit, která pole chceme zpracovat. Jiný než implicitní oddělovač se zadává pomocí přepínače -d. Pomocí příkazu paste se mohou v souboru spojit pole v jiném pořadí. Oddělovačem ve složeném souboru je tabelátor, případnou změnu oddělovače opět zadáváme pomocí přepínače -d. $ cat seznam Pilny Oto vedouci Zaruba Zdenek manager Pritulny Ivo referent Bezzemek Jan referent Kytlink Zdenek referent Horn Rene skladnik

Zpracování textu $ cut -f1 seznam Pilny Oto Zaruba Zdenek Pritulny Ivo Bezzemek Jan Kytlink Zdenek Horn Rene $ cut -f3 seznam $ cut -f1,3 seznam Pilny Oto Zaruba Zdenek Pritulny Ivo Bezzemek Jan Kytlink Zdenek Horn Rene $ cut -d: -f1,2,5 uziv ycacka00:x:Petr Cacka 4 49 ybilek03:x:Petr Bilek 4 48 ykosou01:x:Frantisek Kosour 4 48 yceplm00:x:Jaroslav Cepl 2 B31 ychyle00:x:Ladislav Chylek 4 46 ycasla01:x:Jiri Caslava 4 46 yhrusk01:x:David Hruska 4 46 ymanak06:x:Jiri Manak 4 46 ykorab00:x:Pavel Korabecny 5 48

Zpracování textu $ cut -f1,2 seznam > jm.prof $ cut -f3 seznam > cislo $ paste cislo jm.prof > novy.seznam $ cat novy.seznam Pilny Oto vedouci Zaruba Zdenek manager Pritulny Ivo referent Bezzemek Jan referent Kytlink Zdenek referent Horn Rene skladnik $ $ paste -d* cislo jm.prof *Pilny Oto vedouci *Zaruba Zdenek manager *Pritulny Ivo referent *Bezzemek Jan referent *Kytlink Zdenek referent *Horn Rene skladnik $ $ tty /dev/ttyq3 $ tty | cut -c5-8 /tty $ tty | cut -c6- ttyq3 $ Obdobně lze používat i v případě přepínače -f

Zpracování textu Programovatelný filtr awk Jedná se o programovací jazyk (?), který pracuje se záznamy a poli, je pomalejší než vyšší programovací jazyky, dá se přepsat do jazyka C. awk -f scénář.awk vstupní_soubory Struktura programu Program pro awk se skládá z dvojic vzor {činnost}. Vzor určuje záznam (obvykle řádek), na kterém se činnost provede. Jestliže není vzor uveden, provádí se činnost na všech záznamech. Implicitní činností je výpis záznamu na standardní výstup. Implicitním oddělovačem polí jsou mezery a tabelátory, impicitním oddělovačem záznamů je nový řádek. Jednotlivá pole jsou přístupná prostřednictvím $1, $2, … Proměnná $0 obsahuje celý záznam.

Zpracování textu $ cat scenar1 {print $2,$1" "$4} $ cat seznam1 Pilny Oto vedouci Zaruba Zdenek manager Pritulny Ivo referent Bezzemek Jan referent Kytlink Zdenek referent Horn Rene skladnik $ cat scenar1 {print $2,$1" "$4} $ awk -f scenar1 seznam1 Oto Pilny Zdenek Zaruba Ivo Pritulny Jan Bezzemek Zdenek Kytlink Rene Horn $ Argumenty příkazu print mohou být odděleny čárkou (mezera) nebo tabelátorem (přehlednější výstup).

Zpracování textu $ cat scenar2 /referent/ {print $2,$1" "$6",- Kc"} $ awk -f scenar2 seznam1 Ivo Pritulny 12569,- Kc Jan Bezzemek 12548,- Kc Zdenek Kytlink 10258,- Kc $ cat scenar3 /referent/ || /manager/ {print $2,$1" "$6",- Kc"} $ awk -f scenar3 seznam1 Zdenek Zaruba 15368,- Kc Ivo Pritulny 12569,- Kc Jan Bezzemek 12548,- Kc Zdenek Kytlink 10258,- Kc $ Vzor je uzavřen mezi znaky / (viz. ed), lze použít libovolný regulární výraz, mohou se používat logické operátory ! (negace), || (logický součet), && (logický součin), () (úprava priority vyhodnocování). Porovnání se vzorem lze omezit pouze na některá pole pomocí operátoru ~ (!~).

Zpracování textu $ cat scenar4 $5~/1956/ {print $0",- Kc"} $ awk -f scenar4 seznam1 Pritulny Ivo referent ,- Kc Bezzemek Jan referent ,- Kc $ cat scenar4 $5!~/1956/ {print $0",- Kc"} $ awk -f scenar4 seznam1 Pilny Oto vedouci ,- Kc Zaruba Zdenek manager ,- Kc Kytlink Zdenek referent ,- Kc Horn Rene skladnik ,- Kc $ \b backspace\f nová stránka \n nový řádek\r návrat vozíku \t tabelátor\ooo znak s oktalovou \" uvozovkyhodnotou $ cat scenar4 {print $1"\t\101\40\102"} $ awk -f scenar4 seznam1 Pilny A B Zaruba A B Pritulny A B Bezzemek A B Kytlink A B Horn A B $