Hromadné nahrazení kódu v HTML

martin

Hromadné nahrazení kódu v HTML
« kdy: 30. 03. 2014, 20:02:54 »
Ahoj,
potrebuju na jednom velmi starem webu pridat do menu dalsi polozku a par dalsich uprav. Web nepouziva PHP, jsou to ciste html soubory. Kdysi byly vygenerovany nejakym programem, ale vlastnik uz k nemu nema puvodni soubory, takze tudy cesta nevede.
Napadlo me vyzit kousek kodu, ktery je na kazde strance a nahradit ho stejnym + novym.
Kdyz si vezmu priklad z root.cz:
Kód: [Vybrat]
<div class="strip-2">
<h4>Hlavní navigace</h4>
<ul id="mainmenu" class="clear">
<li><a href='/clanky/'>Články</a></li>
<li><a href='/zpravicky/'>Zprávičky</a></li>
<li><a href='/specialy/'>Speciály</a></li>
<li><a href="http://forum.root.cz/">Fórum</a></li>
<li><a href="http://blog.root.cz/">Blogy</a></li>
<li><a style="color:#74A46B" href="http://www.zdrojak.cz/">Zdroják</a></li>
<li><a href='/knihy/'>Knihy</a></li>
<li><a href='/man/'>Manuály</a></li>
<li><a href='/specialy/licence/'>Licence</a></li>
<li><a href='/texty/zaklady-linuxu/'>Jak na Linux</a></li>
<li class="skoleni"><a href="/skoleni/">Školení</a></li>
<li><a href='/specialy/jabber/'>Jabber server</a></li>
<li><a href='/texty/butik/'>Butik</a></li>
<li><a href='/prace-v-it/'>Práce v IT</a></li>
</ul>
</div>

Tak bych nahradil
Kód: [Vybrat]
<li><a href='/prace-v-it/'>Práce v IT</a></li>
</ul>
</div>
treba za
Kód: [Vybrat]
<li><a href='/prace-v-it/'>Práce v IT</a></li>
<li><a href='/novy/'>Nova polozka menu</a></li>
</ul>
</div>

souboru je nekolik set v nekolika adresarich. Kod, ktery bych nahrazoval je ve vsech souborech 100% stejny. Celkove budu potrebovat pridat asi 50 radku html kodu.

Muzete mi prosim doporucit nejaky vhodny program?
« Poslední změna: 30. 03. 2014, 23:40:07 od Petr Krčmář »


Re:Hromadne nahrazeni kodu v HTML souborech
« Odpověď #1 kdy: 30. 03. 2014, 20:18:39 »
Pokud chcete jen nahrazovat text za text, pak sed. Pokud chcete mít přístup ke stromové struktuře XML, pak je nejlepší použít XSLT transformaci - třeba Saxon. Ale možná byste nejprve musel HTML převést do XHTML.

bydga

Re:Hromadne nahrazeni kodu v HTML souborech
« Odpověď #2 kdy: 30. 03. 2014, 20:30:44 »
Kdyby znal sed, tak se tady asi nejspíš vůbec nebude ptát, nemyslíš? Multireplace ve více souborech umí prakticky každý editor (notepad++, pspad, sublime, textmate...)

e3k

Re:Hromadne nahrazeni kodu v HTML souborech
« Odpověď #3 kdy: 30. 03. 2014, 22:02:49 »
kwrite

Jirsákova tchýně

Re:Hromadne nahrazeni kodu v HTML souborech
« Odpověď #4 kdy: 30. 03. 2014, 22:10:35 »
Ale možná byste nejprve musel HTML převést do XHTML.

No, anebo to rovnou celý přepsat



hodza

Re:Hromadne nahrazeni kodu v HTML souborech
« Odpověď #5 kdy: 30. 03. 2014, 22:34:03 »
Na jednoduche veci pouzivam neco takoveho:
Kód: [Vybrat]
find . -type f -name '*.html' | xargs -i perl -i -pe 's/co_hledam/cim_nahrazuji/;' {}
Pokud budes matchovat/editovat vice radku, pak bych pouzil nejake sablony pres awk. Prvni vec co mi vypadla z googlu: http://stackoverflow.com/questions/4311915/sed-and-awk-how-to-replace-a-section-of-file-to-another-content

martin

Re:Hromadne nahrazeni kodu v HTML souborech
« Odpověď #6 kdy: 30. 03. 2014, 23:23:59 »
XSLT nemuzu pouzit, staci najit a nahradit.

Kwrite, gedit a podobne znam. Ale to mam rucne otevrit nekolik set souboru a vsechno klikat? Mi upadne ruka.

Kód: [Vybrat]
find . -type f -name '*.html' | xargs -i perl -i -pe 's/co_hledam/cim_nahrazuji/;' {}
Jenze moje retezce co_hledam a cim_nahrazuji budou hodne radkove s hromadou uvozovek a dalsich specialnich znaku. Jak se to resi? Musim vsechno escapovat? Exituje na to nejake udelatko?

bydga

Re:Hromadne nahrazeni kodu v HTML souborech
« Odpověď #7 kdy: 30. 03. 2014, 23:33:20 »
regexp a find&replace in files..

Jenda

Re:Hromadne nahrazeni kodu v HTML souborech
« Odpověď #8 kdy: 31. 03. 2014, 01:04:12 »
Jenze moje retezce co_hledam a cim_nahrazuji budou hodne radkove s hromadou uvozovek a dalsich specialnich znaku. Jak se to resi? Musim vsechno escapovat? Exituje na to nejake udelatko?
grepem (parametry -A a -B) bych to rozdělil na část před a po a pak to spojil před-nový_odkaz-po. Až ti to bude fungovat na jednom souboru, přečti si něco o for cyklech v bashi.

Re:Hromadné nahrazení kódu v HTML
« Odpověď #9 kdy: 31. 03. 2014, 07:19:25 »
KWrite to neumí, ale pokročilejší programátorské editory (já používám jEdit) umějí nahrazovat hromadně ve více souborech. Není tedy nutné je všechny otvírat a něco klikat, jenom se zvolí, že nahrazování se má provést třeba pro všechny *.html soubory v adresáři a podadresářích.
Pokud je text opravdu všude stejný, může se použít i obyčejné vyhledávání bez žolíků, pak ani nebude potřeba nic escapovat.
V Perlu by se to neřešilo použitím regulárního výrazu a escapováním, ale napsal by se na to krátký skriptík, který by vstupní text hledal na přesnou shodu (pomocí index a substr) a načítal by jej ze souboru.