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.



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

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

Operační systém UNIX

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

LINUX přesměrování a roury

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

Základní příkazy OS UNIX

FILTRY V GNU/LINUXU ZLÍNSKÝ KRAJ. Obchodní akademie, Vyšší odborná škola a Jazyková škola s právem státní jazykové zkoušky Uherské Hradiště

Seznámení se shellem, textové editory numerické výpočty

Nastroje na zpracovani textu:

Regulární výrazy a grep

Úvod. unx-predn_01-uvod.odt :13:43 1

Cvičení 3. Plán. Procesy. procesy, jobs Find Wildcards Příklad uživatelé. ZOS 2005, L. Pešička. eryx4> ps x

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

Základní příkazy UNIXu (Linuxu)

Příkazová řádka. predn_02.odt :55:55 1

Úvod do Unixu. man: příkaz pro zobrazení nápovědy k danému příkazu, programu (pokud je k dispozici), např. man cp. pwd: vypíše cestu k aktuální pozici

Přednáška 1. Úvod. Historie OS Unix. Architektura OS Unix. Interpret příkazů SHELL. Zpracování příkazové řádky. Speciální znaky. Zkratky příkazů.

Unix je víceuživatelský a víceúlohový OS

PSK3-3. Základní příkazy. Zápis cesty

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

Úvod do UNIXu. Libor Forst

PSK3-5. Přesměrování vstupu a výstupu. Vstup a výstup

Standardní vstupy a výstupy procesu filtry

SQL a XML jako alternativa ke klasickým unixovým nástrojům

1. Uživatelská úprava příkazů I.

PROGRAMOVÁNÍ V SHELLU

DUM 01 téma: Obecné vlastnosti tabulkového editoru, rozsah, zápis do buňky, klávesové zkratky

Lekce 9 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Programování. Bc. Veronika Tomsová

Tahák na UOS 2008/2009

Program grep. predn_05.doc

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

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

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

Cvičení 2. Přesměrování vstupu a výstupu. Posloupnost příkazů. Příkazy pro informaci o uživatelích

Lekce 25 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ

Speciální soubory. Editace příkazové řádky. $ fg mp3blaster $./skript.sh. [2]+ Stopped./skript.sh $ bg [2]+./skript.sh & $ fg 2./skript.

Základy operačního systému LINUX část III

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

grep a regulární výrazy

Téma 9: Administrace systému CentOS. Představení a používání aplikací pro administraci CentOS

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

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

Operační systémy. Cvičení 1: Seznámení s prostředím

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

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

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

Operační systémy 2. Firewally, NFS Přednáška číslo 7b

PŘÍKAZY PRÁCE SE SOUBORY

Přednáška 1. Úvod. Historie OS Unix. Architektura OS Unix. Interpret příkazů. SHELL. Zpracování příkazové řádky. Speciální znaky. Zkratky příkazů.

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

Příkaz finger. # finger sam Login: sam Name: Sam Greenfield Directory: /home/sam Shell: /bin/tcsh Last login Sun Dec 25 14:47 (EST) on tty2 No Plan.

Rozdělení operačních systémů

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.

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

ZOS CV1 Základy operačních systémů

awk programovatelný filtr

Úvod do UNIXu. Jirka Boháč Gymnázium Jaroslava Seiferta 2003/2004

Program pro flexibilní tvorbu evidencí. VIKLAN - Evidence. Uživatelská příručka. pro seznámení se základními možnostmi programu

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.

UŽIVATEL, SKUPINA, PROCES

Úvod do PHP s přihlédnutím k MySQL

Program Montážky manuál uživatele

Volby a Referenda ALIS spol. s r.o.

PREPROCESOR POKRAČOVÁNÍ

Identita uživatelů, přístupová práva. Linux

Úvod do Linuxu. SŠSI Tábor 1

PSK3-7. Plánované spouštění programů a správce sezení. Skupiny procesů

Rekonstrukce elektroinstalace silnoproudu a slaboproudu budovy TF III.

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

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

Úvod, jednoduché příkazy

Ovladač Fiery Driver pro systém Mac OS

LINUX ADRESÁŘOVÁ STRUKTURA. Co to, hrome, je? V této lekci se budeme brouzdat adresáři. SPŠ Teplice - 3.V

Základy operačního systému LINUX část I

Šablonovací systém htmltmpl vypracoval: Michal Vajbar, Šablonovací systém htmltmpl

Administrace OS Unix. Úvodní informace Principy administrace Uživatelé

TÉMATICKÝ OKRUH TZD, DIS a TIS

Požadavky na zpracování maturitní práce

Informatika pro moderní fyziky (2) základy Ruby, zpracování textu

FORMÁTOVÁNÍ ODSTAVCE

Předmluva 23 1 Vítejte ve světě Linuxu 33. ČÁST 1 Operační systém Linux 49

Skripty - úvod. Linux - skripty 2

Úvod do UNIXu, cvičení 1. Organizační informace Co je vlastně ten UNIX? Jak to chodí v labech

Klíčové pojmy: Cyklus, řídící proměnná, inicializace, test podmínky, přerušení cyklu, vnořování cyklů.

1. Základní pojmy a informace

síťová verze - zaúčtování příjemek / výdejek POZOR! <ENTER> párování příjemek s fakturou umazávání plachty při nízkém kreditu

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

1. vydání příručky 2009, Národní památkový ústav, Ing. Martin Lazák

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

Semestrální práce z předmětu m6f. 2 test dobré shody

Kurz Word 2000 Odrážky a číslování Kurz Word 2000 Odrážky a číslování Oddíly Záhlaví a zápatí

Okno Editoru nabízí v panelu nástrojů

Databáze pacientů. Petr Novák (Ing, Ph.D.)

Obr. 1 - Seznam smluv

Téma 2: Práce s commands. Téma 2: Práce s Commands

PŘÍKAZY OVLÁDÁNÍ SHELLU

Zpracování projektové dokumentace na akci Pracoviště pro výzkum inovací techniky a jejího vlivu na prostředí

Zápisní řád Klubu přátel psů pražských krysaříků (KPPPK)z.s.

Transkript:

GREP, AWK, SED a jiné filtry v LINUXu Vybrané filtry 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. head [-n] tail [-n] Zobrazí začátek souboru, prvních 10 řádků nebo n řádků Zobrazí konec souboru, posledních 10 řádků nebo n řádků sort [-n] uniq Setřídí soubor podle abecedy, je-li zadáno n dojde k setřídění podle numerických hodnot. Odstraní stejné řádky, pokud následují ihned za sebou. wc [-l -w -c] Vypíše počet řádků (-l), slov (-w) a znaků (-c) v daném souboru. cut cut -d znak cut -f číslo Umožňuje zadat, kterou část řádky chceme zobrazit, může pracovat s poli nebo s jednotlivými znaky. Implicitně předpokládá, že jsou pole oddělena tabulátorem. Explicitní určení oddělovacího znaku. Výběr určitého prvku pole podle parametru číslo. grep, fgrep egrep awk sed Vybírají řádky, které obsahují nebo neobsahují zadaný prototyp řetězce znaků. Textový procesor. Proudový editor. Jedná se o řádkový editor, kterému se řídící příkazy zadávají z příkazové řádky a který čte opravovaný text buď ze souboru nebo ze standardního vstupu. Systémové programy jsou v Unixu koncipovány tak, aby plnily pouze jeden specializovaný úkol (například vyhledávání řetězců v textovém souboru). Tento úkol ale musí splnit spolehlivě a rychle. komplexního úkolu je proto nutné rozložit na jednoduché úkoly, pro jejichž řešení existují systémové programy. Protože unixové shelly umožňují vytváření rour a systémové programy mohou většinou pracovat jako filtry, je možné jednoduché sestavení specializovaných systémových programů do roury, která daný komplexní úkol vyřeší. Tento přístup k řešení úkolů je velmi flexibilní a efektivní. Autoři Unixu jej měli na mysli již od počátku vývoje systému a podpořili jej zabudováním systémové služby pro vytváření rour již do prvních verzí Unixu. - 1 -

Regulární výrazy Slouží pro zadávání prototypů řetězců v příkazech programů grep, egrep, awk a sed. Regulární výraz obsahuje běžné znaky a znaky se speciálním významem (metaznaky). Nejdůležitější metaznaky mají následující význam:. Označuje jeden libovolný znak \ Jedná se o znak výluky, tj. ruší speciální význam bezprostředně následujícího znaku [ ] - ^ Pomocí těchto znaků se vytváří výraz pro zadání množiny alternativních znaků (alternativy). Pravidla pro vytvoření alternativy jsou stejná jako v shellu při zadávání názvu souboru pomocí expansních znaků. Například [a-z] označuje libovolný znak ze znaků a,...,z [^adz] označuje jeden znak různý od znaků a,d,z [.x] označuje znak. nebo x. ^ (mimo hranaté závorky) Označuje začátek řádku. $ Označuje konec řádku. * (uzávěr) Uzávěr se vztahuje k bezprostředně předcházejícímu znaku a znamená libovolný počet opakování tohoto znaku. Libovolný počet zde znamená i nulový počet opakování. Příklad 1: ab* označuje řetězce a, ab, abb, abbb atd..* označuje libovolný řetězec (i prázdný)..* označuje libovolný neprázdný řetězec \..* označuje libovolný řetězec začínající znakem. ^$ označuje prázdný řetězec [a-za-z]* Programy grep, fgrep, egrep označuje libovolný alfabetický řetězec Program grep slouží pro vyhledávání řádků, které obsahují nebo naopak neobsahují řetězec, který splňuje prototyp zadaný regulárním výrazem. Vstupní data grep čte ze souboru nebo ze standardního vstupu. Výstup programu je směrován na standardní výstup. Základní syntaxe příkazu grep je grep "regulární výraz" [soubor] grep -v "regulární výraz" [soubor] Na výstup propouští ty řádky, které splňují regulární výraz. Na výstup propouští ty řádky, které nesplňují regulární výraz. - 2 -

Příklad 2: Složený příkaz $ls -al /etc grep "^d" vypíše všechny podadresáře obsažené v adresáři /etc. Program fgrep (fast grep) je rychlejší verze programu grep. Rychlejší může být proto, že tvar přípustných regulárních výrazů je podstatně omezen. Regulární výraz nesmí obsahovat žádný metaznak. Regulární výraz tedy degeneruje na řetězec normálních znaků a fgrep vyhledává v řádcích souboru zadaný řetězec znaků. Příklad 3: Příkaz $cat /etc/passwd fgrep -v /bin/csh vypíše řádky všech uživatelů, pro které je po připojení spuštěn jiný shell než /bin/csh. Program egrep (extended grep) je rozšířená verse programu grep. Povoluje obecnější formu regulárních výrazů. Regulární výrazy lze především do sebe vnořovat. Například regulární výraz lze zapsat takto: a(xy)* označuje řetězce a, axy, axyxy, axyxyxy atd. Kromě toho regulární výrazy mohou navíc obsahovat následující metaznaky + Modifikace uzávěru *. Znamená jedno nebo více opakování znaku.? Uzávěr ve významu jedno nebo žádné opakování znaku. Operátor, který má význam logické spojky nebo. Příklad 4: Výraz Výraz x+ je totéž co [x]* (abc)? xyz ab Program sed splňuje prázný řetězec nebo řetězec abc splňuje řetězec xyz nebo řetězec ab Program sed je proudový editor (stream editor, proto se užívá zkratka sed). Vznikl úpravou řádkového editoru ed a používá stejné instrukce jako editor ed. Na rozdíl od editoru ed čte příkazy z příkazového řádku a ne z klávesnice. Editor sed se spouští takto sed příkazy [soubor... ] sed čte vstupní data ze souborů uvedených v příkazové řádce. Pokud v příkazové řádce není žádný soubor uveden, načítá data ze standardního vstupu. Program sed načítá vstupní data - 3 -

postupně po řádkách, řádky mění podle zadaných příkazů a pak je vypisuje na standardní výstup. Příkazy se oddělují středníkem. V Bourne shellu mohou být také odděleny znakem nový řádek. Editor sed je především určen pro použití ve skriptech. Nejčastěji se používá tehdy, když je třeba určitý řetězec řádky zaměnit za jiný. Pro naše účely tento způsob použití postačí a proto se omezíme jen na ty příkazy, které jsou k tomu třeba. Zájemce o úplnou informaci o programu sed odkazujeme na odbornou literaturu (například Kernighan 1996). Příkazy pro substituci jsou následující: / vzor / s /regulární_výraz / řetězec / Ve všech řádcích, ve kterých je nalezena instance vzoru, je nahrazena první instance regulárního_výrazu řetězcem. / vzor / s / reguární_výraz / řetězec / g Ve všech řádcích, ve kterých je nalezena instance vzoru, je nahrazena každá instance regulárního_výrazu řetězcem. Instancí regulárního výrazu rozumíme řetězec, který jej splňuje. Ve výše uvedených příkazech pro substituci jsou vzor a regulární_výraz regulárními výrazy. V obou příkazech pokud není uveden vzor, vezmou se všechny řádky. Příklad 5: $sed s/ab/xy/ ababab prvni xyabab prvni ctrl+d $sed s/[ab]/xyz/g >s/prvni/druhy/ ab prvni xyzxyz druhy ctrl+d Poznámka Program sed normálně opisuje na standardní výstup všechny řádky vstupního souboru. Pokud tento opis vypneme modifikátorem příkazu -n, vypíše jen ty řádky, pro které to explicitně požadujeme příkazem p. Proto například příkaz sed -n /vzor/p soubor dá stejný výstup jako příkaz grep vzor soubor - 4 -

Program awk Program awk je řádkově orientovaný program pro úpravu textu. Jedná se o program značné složitosti, jehož činnost lze řídit programem napsaným ve speciálním jazyce. Při většině aplikací ale stačí řídit činnost awk pomocí sekvencí jednoduchých příkazů, které se zadají z příkazové řádky. Omezíme se pouze na tento případ jeho použití. Program awk lze spustit následovně: awk příkazy [soubor] Pokud soubor není uveden, vstupní data se čtou ze standardního vstupu. Příkazy se oddělují středníkem nebo v Bourne shellu také znakem nový řádek. Program awk načítá řádky ze souboru nebo ze standardního vstupu, modifikuje je podle zadaných příkazů a výsledek vypisuje na standardní výstup. Načítané řádky program awk dělí na slova. Oddělovač slov je implicitně mezera. Pomocí modifikátoru -F, který se uvede v příkazové řádce, lze zadat i jiný oddělovač slov. Na slova se lze v příkazech, které řídí činnost awk, odvolávat pomocí symbolů $1, $2,.... Nejpoužívanější syntaxe příkazů jsou následující : podmínka podmínka { akce } / regulární výraz / / regulární výraz / { akce } Podmínka se tvoří z termínů pomocí relačních operátorů a logických operátorů stejných jako v jazyce C a z operátoru ~. Operátor ~ slouží pro srovnání regulárního výrazu s hodnotou obsaženou ve slově. termíny jsou buď celá čísla, regulární výrazy nebo slova. Regulární výrazy nutno uzavřít do závorek / /. Regulární výrazy v podmínkách se vztahují na slova, ne na řádky. Například regulární výraz /^x/splňují všechna slova začínající na x a regulární výraz /^$/ označuje prázdné slovo. Akce je v nejjednodušším případě přiřazení hodnoty slovu nebo příkaz pro tisk print Řádky, které nesplňují zadanou podmínku, nebo ve kterých není nalezen řetězec splňující regulární výraz, se vynechají. S ostatními řádky se provede v příkazu specifikovaná akce. Většinou spočívá ve vytisknutí slov řádku zadaným způsobem. Pokud akce není uvedena, opíše se načtený řádek beze změny na výstup. - 5 -

Příklad 6: Následující příkazy mají tento význam: $1 > 100 Pokud je první slovo větší než 100 vytiskne se celý řádek /abc/{print $1,$3} Pokud je v řádku nalezen řetězec abc, je vytištěno první a třetí slovo řádky $3 ~ /^x/ && $5 == 10 {print "slovo1=",$1, "slovo6=",$6} Pokud třetí slovo začíná na x a páté slovo je rovno 10, vytiskne se první a šesté slovo řádku Příklad 7: Ze souboru uživatelů vypište uživatele, kteří mají UID větší než 100. Ve výpisu bude uživatelské jméno, UID uživatele a plné jméno uživatele (je v poli poznámky). : $awk -F : $3 > 100 {print $1,$3,$5) /etc/passwd Příklad 8: Ze souboru uživatelů vypište všechny uživatele, kteří mají do systému přístup bez uvedení hesla. : $awk -F : $2 == "" /etc/passwd nebo $awk -F : $2 ~ /^$/ /etc/passwd Vkládání dat do skriptu Programu, který čte vstupní data ze standardního vstupu a který je spuštěn ze skriptu, lze vložit vstupní data přímo do scriptu jako tzv. here-document. Provede se to tak, že se ve scriptu za příkaz spuštění programu uvede řetězec, který bude sloužit jako indikátor konce vstupních dat. Před tento řetězec nutno zapsat znaky <<. Vstupní data se vloží počínaje řádkem, který následuje za příkazem pro spuštění programu. Po spuštění začne program načítat vstupní data ze skriptu. Data se načítají dokud se nenarazí na zápis řetězce ukončujícího data. Řetězec indikující konec vstupních dat musí být uveden na samostatném řádku od první pozice. Vložení here-dokumentu do skriptu:........ příkaz parametry << řetězec vstupní data (here-document) řetězec.......... - 6 -

Příklad 9: následující skript dopis pošle všem uživatelům, kteří jsou uvedeni v souboru uzivatele, e-mail, jehož text je vložen přímo do skriptu. $cat dopis mail cat uzivatele <<+ pripominam stredecni schuzku novak + Příklady Příklad 10: Vypište prvních sedm a posledních pět řádků souboru /etc/passwd. $cat /etc/passwd head -7 $cat /etc/passwd tail -5 Příklad 11: Vyzkoušejte použití filtrů sort a uniq. $cat > pokus1 99 balonku 101 dalmatinu 16 svicek 24 hodin 9 studentu $cat pokus1 sort 101 dalmatinu 16 svicek 24 hodin 99 balonku 9 studentu $cat pokus1 sort n 9 studentu 16 svicek 24 hodin 99 balonku 101 dalmatinu - 7 -

$cat > pokus2 tri tri $cat pokus2 uniq tri $cat pokus2 sort uniq tri Příklad 12: Vypište počet znaků, slov a řádků v souboru /etc/passwd. $cat /etc/passwd wc 6 16 85 $cat /etc/passwd wc c 85 $cat /etc/passwd wc w 16 $cat /etc/passwd wc l 6-8 -

Příklad 13: Zjistěte název interpretu příkazů uživatele john. $cat /etc/passwd grep ^john: cut d : -f 7 Poznámka: Název interpretu je 7.položka, položky jsou odděleny dvojtečkou. Příklad 14: Přepište obsah souboru /etc/passwd do vašeho domácího adresáře pod názvem hesla. Při tomto přepisu zaměňte všechny výskyty znaku : za znak?. $sed s/:/?/g >~/hesla Příklad 15: Napište příkaz, který vypíše z adresáře /etc pouze podadresáře. $ls -al /etc grep ^d Příklad 16: Napište příkaz, který vypíše počet podadresářů adresáře /etc. $ls -al /etc grep ^d wc -l Příklad 17: Vytvořte dlouhý výpis adresáře /etc (příkazem ls -al ). Dlouhý výpis bude obsahovat pouze adresáře a začátek každého řádku bude místo písmenem d začínat řetězcem Adresar: $ls -al /etc grep ^d sed s/^d/adresar: Nebo lepší řešení: $ls -al /etc sed -n /^d/s/^d/adresar:/p Příklad 18: Vypište počet uživatelů, kteří mají v systému momentálně spuštěny nějaké procesy. Pro výpis procesů využijte příkaz ps ef. $ps ef awk {print $1} sort uniq wc -l Příklad 19: Pomocí příkazu awk vypište z tabulky uživatelů /etc/passwd jména těch uživatelů, kteří mají UID větší naž 100. $cat /etc/passwd awk -F : $3 =>100 {print $1 } - 9 -

Příklad 20: Příkazem vypište a) Seznam připojených uživatelů b) Seznam studentských uživatelských jmen (tj. uživatelských jmen začínajících na x) c) Seznam uživatelů, kteří zabírají na disku více než 1MB Bourne shell: a) $who awk {print $1} b) $cat /etc/passwd awk -F : $1 ~ /x.*/ {print $1} c) $du -sk /home/* 2>du.err awk $1 > 1024 {print $2} \ awk -F / {print $3} V C shellu se příkazy a) a b) zadají stejně. Příkaz c) lze zadat následovně: %(du -sk /home/* awk $1 > 1024 {print $2} \ awk -F / {print $3} >/dev/tty) >&/dev/null Příklad 21: Napište příkaz, který zjistí kolik je v souborech /etc/passwd a /etc/group prázdných řádků. %grep "^$" /etc/passwd /etc/group wc -l - 10 -