Portál AbcLinuxu, 11. května 2024 22:58


Dotaz: SED a HTML

benyy avatar 15.6.2007 17:46 benyy | skóre: 14
SED a HTML
Přečteno: 327×
Odpovědět | Admin
Ahoj, mam problem, mam html kod, ktery upravuju sedem a skoro vsechno co chci uz mam. Jenze sem narazil na posledni problem a to pouzit sed na vic jak 2 radky. Problem je takovy, mam tabulku:
<table>
<tr class="head">
<td></td>
</tr>
<tr>
<td></td>
</td>
</table >
a potreboval bych prvni radek ohranicit do tagu aby to ve vysledku vypadalo nejak takhle
<table>
<thead><tr>
<td></td>
</tr>
<tr></thead>
<td></td>
</td>
</table>
pred ten prvni tag to zvladam umistit, ale nemuzu prijit na to jak to dostat za ten ukoncujici TR, protoze velikost tabulky neni vsude stejne. Byl by nekdo tak ochotny a poradil mi treba kouskem kodu. Dik
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

15.6.2007 18:31 macrek | skóre: 12
Rozbalit Rozbalit vše Re: SED a HTML
Odpovědět | | Sbalit | Link | Blokovat | Admin
ak mas moznost pouzit awk tak napr. takto:

>cat prog
/<table>/ {tab=1}
tab==1 && ($0 ~ /<tr/) {tab=2;print "<thead>",$0;next}
tab==2 && ($0 ~ /<\/tr>/) {tab=0;print $0,"<\/thead>";next}
{print $0}

>awk -f prog subor.html


Dufam, ze som sa nikde nesekol
An eye for an eye makes the whole world blind.
15.6.2007 18:42 Messa | skóre: 39 | blog: Messa
Rozbalit Rozbalit vše Re: SED a HTML
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nikdy jsem v awku nedělal nic složitějšího než print $2, ale tohle zdá se na ukázkovém kódu funguje:
awk 'BEGIN {X=0;}
{ if ($0 == "<tr class=\"head\">") {print "<thead><tr>"; X=1;}
else if ($0 == "</tr>" && X == 1) {print "</tr></thead>"; X=0;}
else print $0; }' in.html
15.6.2007 19:17 Ash | skóre: 53
Rozbalit Rozbalit vše Re: SED a HTML
Odpovědět | | Sbalit | Link | Blokovat | Admin
Lidi nelezte mi sem s těma vašima awkanonama a perlama a já nevim ještě python do toho :D :D Chtěl sed tak sed :)

Ba ne, uznávám že sed není pro multiline úplně ideální, berte to s nadhledem, sám jsem nepřišel na to jak nahradit jen "první resp. jeden řádek", ale v případě tabulky to je snadné, protože tam se dá chytit toho úvodního <table.. žejo... sed -f file.sed file.html

file.sed
:l
N
s/<table\(.*\)\(<tr.*<\/tr>\)/<table\1<thead>\2<\/thead>/
T l
A.
15.6.2007 19:26 Ash | skóre: 53
Rozbalit Rozbalit vše Re: SED a HTML
Nebo samozř. inline..
sed -e sed -e ":l;N;s/<table\(.*\)\(<tr.*<\/tr>\)/<table\1<thead>\2<\/thead>/;T l" file.html
15.6.2007 19:27 Ash | skóre: 53
Rozbalit Rozbalit vše Re: SED a HTML
Oprava, tolik toho sedu být nemusí:
sed -e ":l;N;s/<table\(.*\)\(<tr.*<\/tr>\)/<table\1<thead>\2<\/thead>/;T l" file.html
15.6.2007 20:55 Ash | skóre: 53
Rozbalit Rozbalit vše Re: SED a HTML
Jsem si nevšiml že kolega chtěl odstarnit tu class, čili:
sed -e ":l;N;s/<table\(.*\)<tr[^>]*>\(.*<\/tr>\)/<table\1<thead><tr>\2<\/thead>/;T l" test.html
ale to už je vcelku jasné.
16.6.2007 03:44 %
Rozbalit Rozbalit vše Re: SED a HTML
todle obecne pro html nefunguje. protipriklad nechame jako domaci cviceni. ten problem nad html proste neni regularni.
16.6.2007 08:09 Ash | skóre: 53
Rozbalit Rozbalit vše Re: SED a HTML
Jo to máte pravdu, stavový automat v sedu napsat neumím :( Nicméně "obecné řešení pro html" zatím nemáme ani v tom awk, když nad tím tak přemýšlím.

macrek: Jak kolega správně upozornil, v případě použití sedu nevnořovat do těch prvních řádků další tabulky...
16.6.2007 08:13 Ash | skóre: 53
Rozbalit Rozbalit vše Re: SED a HTML
Tedy aby někdo nerýpal, to co jsem napsal samozř. stav. automat je, ale ty stavy jsou jen obezlička aby to nachroustalo html do jednoho řádku, nikoliv konstrukce určená pro obecné řešení problému jako takového.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.