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/</\</g
s/>/\>/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.