Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Informace
Rozsáhlejší příklad se sedem
17. ledna 2002, 00.00 | V tomto dílu se podíváme na praktické využití příkazu sed - jako názorná ukázka nám poslouží skript, který používám pro překlad ASCII textu do HTML.
Nejprve se podívejme na odpověď na otázku z minulého dílu: "máme-li skupinu příkazů, která je jako celek omezena nějakou adresou, můžeme vždy dosáhnout přesně stejného efektu tím, že skupinu zrušíme, a tutéž adresu použijeme pro všechny její příkazy"?Samozřejmě, pravdu měli ti, kdo odpověděli záporně. Jen se zamyslete třeba nad dvojicí skriptů
/z/y/z/Z/
/z/s/[A-Z]/(&)/g
a
/z/{ y/z/Z/
s/[A-Z]/(&)/g
}
Je zřejmé, že stejně fungovat nebudou!
Příklad
Slibovaný rozsáhlejší příklad je sedový skript, který (v trochu složitější podobě, která by přesáhla zaměření tohoto seriálu) sám používám pro konvertování ASCII textů do HTML pro server MujMac, kde vinou toho, že redakce není schopna zpracovat standardní HTML entity, nemohu používat přímo pohodlný HTML editor.
V ASCII textu používám řadu speciálních přepínačů, uvozených dvojicí lomítek. Například a mimo jiné:
- kombinace "//0", "//1" a podobně uvozují nadpisy různých úrovní (úrovně MujMac nerozlišuje — podívejte se do skriptu, všechny jsou převedeny na tučné písmo);
- jestliže je před nějakým slovem přepínač "//i", bude slovo převedeno do kursivy; pokud je tento přepínač před uvozovkami, bude do kursivy převeden kompletní text v uvozovkách. Pokud se nehodí ani jedna z těchto možností, mohu kursivu explicitně ukončit přepínačem "//I";
- stejně funguje přepínač "//t" pro neproporcionální písmo; oproti kursivě však může stát i na samém začátku výpisu zdrojového kódu (nebo snímku terminálového okna), ukončeného prázdným řádkem — v něm se pak také převedou všechny mezery na nezlomitelné mezery, a konce řádků se doplní tagem <BR>;
- odkazy URL prostě předchází přepínač "//u"; za ním může být buď skrytý odkaz v závorkách, takže "//u(http://www.ocs.cz)OC" se zobrazí jako OC, nebo přímo požadovaná adresa — před tu se automaticky doplní "http:", takže zápis "//uwww.apple.com" dopadne takto: www.apple.com...
Než se na skript podíváme podrobněji, musím dodat jednu drobnost: stejně jako všechny ostatní standardní skriptovatelné příkazy, i sed ignoruje řádky, které začínají znakem '#'. Ty se tedy mohou používat jako komentáře.
# the sed patterns for converting ASCII to HTML
### & and <>, mdash
s/&/\&/g
s/>/\>/g
s/</\</g
s/—/\—/g
### an empty line changed to a paragraph end
s|^$|</P><P>|
### //t denotes a terminal typeface:
### //t ... //T explicit from-to
### //t" ... " quoted text
### //t<word>
### ^//t<paragraph>
\|^//t|,\|</P><P>|{s|$|<BR>|;s/ /\ /g;}
\|^//t|s||<TT>|
\|</P><P><BR>|s||</TT></P><P>|
\|//t\([^/]*\)//T|s||<TT>\1</TT>|g
\|//t"\([^"]*\)"|s||"<TT>\1</TT>"|g
\|//t\([^ ,.:;"!?()]*\)|s||<TT>\1</TT>|g
### //m for messages — like //t, but accepts colons
\|//m\([^ ,.;"!?()]*\)|s||<TT>\1</TT>|g
### //i works like //t, but for italics
\|//i\([^/]*\)//I|s||<I>\1</I>|g
\|//i"\([^"]*\)"|s||"<I>\1</I>"|g
\|//i\([^ ,.:;"!?()]*\)|s||<I>\1</I>|g
### links: kinda like tt/i, but there can be URL in ()
\|//u(\([^)]*\))\([^/]*\)//U|s||<A HREF="\1">\2</A>|g
\|//u\([^/]*\)//U|s||<A HREF="http://\1">\1</A>|g
\|//u(\([^)]*\))\([^ ,;"!?()]*\)|s||<A HREF="\1">\2</A>|g
\|//u\([^ ,;"!?()]*\)|s||<A HREF="http://\1">\1</A>|g
### headers
\|^//0\(.*\)$|s||<B>\1</B>|
\|^//1\(.*\)$|s||<B>\1</B>|
\|^//2\(.*\)$|s||<B>\1</B>|
\|^//3\(.*\)$|s||<B>\1</B>|
### figures
\|^//obr:\(.*\)$|s||<IMG SRC="images/\1">|
Je vše jasné? , je-li zapotřebí, abych některé příkazy příště rozebral podrobněji...
Příště
Příště se buď podíváme detailně na některé příkazy z mého skriptu, jež vyžadují podrobnější vysvětlení, nebo se začneme věnovat dalšímu velmi silnému příkazu ze standardní unixové nabídky — příkazu awk.
Obsah seriálu (více o seriálu):
- Obcování s ďáblem
- Obcování s ďáblem 2 - základy
- Obcování s ďáblem 3 - Práce se soubory
- Obcování s ďáblem 4 - Další práce se soubory
- Obcování s ďáblem 5 - Stále soubory, hlavně linky
- Obcování s ďáblem 6: Pár zbývajících drobností
- Obcování s ďáblem 7: Samá voda, přihořívá, hoří!
- Obcování s ďáblem 8: Jak se do shellu volá, tak se program ozývá
- Obcování s ďáblem 9: Nové finty na programy
- Obcování s ďáblem 10: Do fronty, pánové, do fronty!
- Obcování s ďáblem 11: Standardní vstup a výstup
- Obcování s ďáblem 13: Další triky
- Obcování s ďáblem 14: Vyšší škola hledání souborů
- Obcování s ďáblem 15: Příkaz find stokrát jinak
- Obcování s ďáblem 16: Co se ještě dá uvařit z příkazu find
- Obcování s ďáblem 17: Regulární výrazy
- Obcování s ďáblem 18: Speciální regulární výrazy
- Obcování s ďáblem 19: Skládání regulárních výrazů
- Obcování s ďáblem 20: Regulární výrazy se zpětnými odkazy
- Obcování s ďáblem 21:K čemu je dobrý grep...
- Zázraky ihned, nemožné na počkání: sed
- Obcování s ďáblem - další finty s příkazem sed
- Rozsáhlejší příklad se sedem
- Obcování s ďáblem: Další kouzla, aneb awk
- Awk a proměnné
- Obcování s ďáblem 27: Awk a výrazy
- Obcování s ďáblem: Awk a funkce
- Awk a příkazy
- Co je to vlastně "uživatel"?
- Vlastnictví objektů
- Přístupová práva
- Vlastník, skupina, ostatní...
- Jak je to se skupinami?
- Skupiny a uživatelé
- Scripty
- Komentáře, a volba shellu
- Pro skript může být shell cokoli!
- Shellové skripty a argumenty
- Skripty a proměnné: aritmetika
- Proměnné shellu, "dědění" hodnot
- Práce s proměnnými
- Práce se jmény souborů
- Pole hodnot
- Další triky kolem polí...
- Standardní proměnné shellu
- Základní příkazy pro skripty
- Příkaz if
- Speciální podmínkové příkazy
- Podmínky pro práci se soubory
- Jednoduchý cyklus
- Příkaz for a pomocné příkazy break a continue
- Příkaz case
- Příkazy exit a select
- Rejstřík a přehled
- Procesy
- Informace o procesech
- Další klíčová slova pro příkaz ps
- Příkaz ps: několik praktických přepínačů
- A k čemu že je "ps" dobré?
- Copak procesor, s pamětí je to horší
- Virtuální paměť
- A ještě jednou virtuální paměť
- Zpět k příkazu ps
- Skutečný žrout paměti
- Ještě jednou top
- Doplněk k topu: vm_stat
- Co to tedy všechno znamená?
- Nevychází nám dal a má dáti?
- Kam se stránky ukládají?
- Změna odkládacího disku
- Změna odkládacího disku / fstab
- Poslední poznámka k fstab
- A jak to je se soubory?
- Co vlastně příkaz lsof vypisuje?
- Příkaz lsof a obsah sloupce NAME
- SIPS - Terminál není jen pro nadšence UNIXu
- Tak nám zabili NetInfo, paní Müllerová