( zeller | 2009. 03. 21., szo – 20:54 )

Az awk-ban fogod azokat a mintákat, amik a sorokat megkülönböztetik:


$ cat atir.awk
BEGIN    { printf "<html>;\n<body>\n" ; }
/^\$/    { printf "\n<pre>%s</pre>\n", $0; }
$1~"^=$" { $1="<h1>"; $NF="</h1>"; printf "%s", $0; }
$1~"=="  { $1="<h2>"; $NF="</h2>"; printf "%s", $0; }
/^$/     { printf "</br>" ; }
/^  \*/  { $1="<li>"; printf  "%s</li>", $0 ; }
END      { printf "\n</body>\n</html>\n" ; }

És kirakod gyakorlatilag egy hosszú sorba, sortörés nélkül, majd a megfelelő helyekre berámolod a sortöréseket és a lista kezdetét meg végét sed-del:


$ cat csere.sed
s/<\/li><li>/<\/li>\n<li>/g
s/<\/h1><li>/<\/h1>\n<ul>\n<li>/g
s/<\/h2><li>/<\/h2>\n<ul>\n<li>/g
s/<\/br><li>/<\/br>\n<ul>\n<li>/g
s/<\/li><\/br>/<\/li>\n<\/ul>\n<\/br>/g

Az elején kell egy sed, ami a kiinduló szövegben cserélget, ez valahogy úgy néz ki, hogy:


$ cat elocsere.sed
s/</\&lt;/g
s/>/\&gt;/g

Az egészet meg egy parancssorban lefuttatod:


$ sed -f elocsere.sed < be.txt | awk -f atir.awk  | sed -f csere.sed  > ki.html

Esküszöm, ez volt az utolsó kacsacsőröket tartalmazó code blokk, amit beszenvedtem ide...Az awk-ba még kell egy sor, aminél a minta negálva tartalmazza az összes megadottat (azaz azok, amik nem illeszkednek rá, azokat simán ki kell írni, mögéjük rakva egy </br> tag-et.