Rozsáhlejší příklad se sedem - MujMAC.cz - Apple, Mac OS X, Apple iPod

Odběr fotomagazínu

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:

Soutěž

Sponzorem soutěže je:

IDIF

 

Odkud pochází fotografka Anne Erhard?

V dnešní soutěži hrajeme o:

Seriály

Více seriálů



Software

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/&/\&amp;/g
s/>/\&gt;/g
s/</\&lt;/g
s/—/\&mdash;/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/ /\&nbsp;/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):

Tématické zařazení:

 » Rubriky  » Informace  

 » Rubriky  » Agregator  

 » Rubriky  » Software  

Diskuse k článku

 

Vložit nový příspěvek   Sbalit příspěvky

 

Zatím nebyl uložen žádný příspěvek, buďte první.

 

 

Vložit nový příspěvek

Jméno:

Pohlaví:

,

E-mail:

Předmět:

Příspěvek:

 

Kontrola:

Do spodního pole opište z obrázku 5 znaků:

Kód pro ověření

 

 

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: