Sziasztok, arrol lenne szo, h peldaul van egy ilyen szovegunk:
http://www.fit.vutbr.cz/study/courses/IOS/public/Lab/projekt1/ls.newrep…
A feladat pedig ugy szol hozza, h HTML kodda kell alakitani az egeszet, es igy kell majd mukodnie:
tee ls.newreport | ./report2html.sh >ls.html
es ez lesz belole:
http://www.fit.vutbr.cz/study/courses/IOS/public/Lab/projekt1/ls.html
= =
== ==
ahol dollar jel azokat
be
<, > es & a
es
kozott erre: <, > a &.
ures sor helyett betenni
taget
Ket helykoz es utann csillag, akk listat kell belole csinalni
ahol nincs semmi specialis jel annak a sornak a vegere szinten
taget kell tenni.
es egy szkriptet kell megirni ami ezt megcsinalja, mar awk val csinalom:), de nem muxik:).
#!/bin/bash
#/usr/awk -f
#``
awk 'BEGIN {print "", "" } >> $FILENAME +".html" '
# a H1 az majd igy fog kinezni reg awk '/^=$/' , H2 pedig igy ^==$
#read line
awk 'RS = "\n"'
if [^$] ; then awk ''/^$ /$/' {print"
"; for (i = 2; i <= NF; i = i + 1); NF+1 = "
"}'
fi
awk ''/^$ /$/' {print"
"}' if awk ''/^=$/' {print ""}' then awk ''NF+1 '{print ""}' if awk ''/^==$/' {print ""}' then awk ''NF+1 '{print "
"}' awk 'END {print"", ""}' Igazól ma fekszem neki, de bármilyen segitség jol jon :) Segitsegeteket elore koszonom.
- 2095 megtekintés
Hozzászólások
Szerintem először is válassz ki egy alkalmas szkriptnyelvet a feladat megoldásához. A shell szkriptet, ha lehet, kerüld, különben a megoldás karbantarthatatlan lesz, és bővíteni csak komoly hackelések árán lehet. Tisztán AWK-ban pl. megoldható a feladat, bár én nem vállalkoznék rá. Itt egy Perles megoldás (bár ez sem szép, sok benne a copy&paste):
Erre a feladatra kifejezetten ajánlom a Perlt. A fenti szkript alapján talán nem is lesz nehéz elindulni.
- A hozzászóláshoz be kell jelentkezni
Szia!
Nagyon szepen koszonom a megoldast Perlben, tenyleg jo lesz kiindulasi alapnak:).
CSak az a gond, hogy mi a Perl nyelvet nem hasznalhatjuk. csak a BASH beepitett funkcioit és AWK-t.
- A hozzászóláshoz be kell jelentkezni
:A shell szkriptet, ha lehet, kerüld, különben a megoldás karbantarthatatlan lesz, és bővíteni csak komoly hackelések árán lehet.
Ez baromság. A shell-t ugyanúgy meg kell (és lehet) tanulni, mint minden más nyelvet. Persze a többség nem veszi a fáradságot. A különbség mondjuk egy Perl-hez képest, hogy érdemes mellé megtanulni a grep - sed - awk - stb eszközöket is, de azt meg amúgy is érdemes.
- A hozzászóláshoz be kell jelentkezni
: Ez baromság.
Értem. Külső processzt indítani egy s///-ért nyilván jobban megéri, mert a Perl amúgy is híresen szar minta-illesztésre. Azt hiszem nem szeretnék vitatkozni.
- A hozzászóláshoz be kell jelentkezni
Ne is tedd. Ominozus hozzaszolasodban amire valaszoltam, ez szerepelt: karbantarthatatlan lesz a shell script. Most meg azzal probalsz ervelni, hogy uj processz. Dontsd mar el, mit akarsz mondani. Az uj processz inditasa/nem-inditasa jo erv lehet. A karbantarthatatlansag nem az. Sok ember van, aki szerint Perl-lel nagyon konnyu nehezen olvashato kodot eloallitani, ami kicsit jobban ellentmond a karbantarthatosagnak, mint az "uj processz egy csere-muveletre".
- A hozzászóláshoz be kell jelentkezni
NEM erről van szó. Shell scriptben, sed, grep, cut, tr, awk okos használatával rettentő sok dolgot meg lehet csinálni -- úgy is, hogy writeonly lesz a scrpit, meg úgy is, hogy szépen olvasható, használható.
Ha pl. nincs Perl, akkor irreleváns, hogy Perl-ben gyorsabb/szebb/jobb/stb. kód hegeszthető adott problémára -- a Perl abban az esetben nem játszik, mint ahogy itt sem.
- A hozzászóláshoz be kell jelentkezni
Hint: bash-ben ehhez nem kell uj proc.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
Sikerult megoldani a problemat maar, koszi a szepen a segitseged :), otletet adtal parat :)
Ime a megoldas : http://pastebin.com/m77b6c3f4
- A hozzászóláshoz be kell jelentkezni
Borzasztó... Hány tucatnyi processz, te jószagú málnabokor... De majd belejössz...
- A hozzászóláshoz be kell jelentkezni
Minden kezdet nehez, de legalabb mukodokepes :D
- A hozzászóláshoz be kell jelentkezni
A témához két "musthave" szakirodalom:
GAWK: Effective AWK Programming
Sed & Awk
- A hozzászóláshoz be kell jelentkezni
hmm, koszi szepen :), eleg sok manualt meg konyvet atragtam maar ::P, de a tudasbol sosem eleg, majd atragom magam ezeken is :).
- A hozzászóláshoz be kell jelentkezni
Bocs, most láttam csak a PM-et. Remélem megoldódott, ha nem, jelezd, bár Zeller-t AWK-ban nehéz legyőzni.
- A hozzászóláshoz be kell jelentkezni
Köszi a bókot, igyekszik az ember... :)
- A hozzászóláshoz be kell jelentkezni
Hm, ilyen "szürke" PDF-et nem tudsz pl. az O'Reilly kiadású Korn-shell programming-ról? (Kategóriákkal jobb, mint a sizntén náluk megjelent bash; pl. mert sokkal hordozhatóbbak a kódok.)
- A hozzászóláshoz be kell jelentkezni
Nem tudok, de kérdezd meg őt. (Csak html-ben találtam -- gyakorlatilag az egész könyvespolc ott van...)
- A hozzászóláshoz be kell jelentkezni
Az awk-ban direkt nem rakok sortörést, a következő sed-benígy lehet egyszerűen cserével berakni a listaelemek elé-mögé az <ul> és </ul> tag-eket.
- A hozzászóláshoz be kell jelentkezni