[+] Sed warunkowe przekształcanie linii
: 16 kwietnia 2013, 23:22
Mam problem z programem sed. Mam wiele plików, w których chciałbym podmienić pewien wzorzec. Są to pliki html, a interesujące mnie linie wyglądają mniej więcej tak:
[HTML]<TR class="{cycle}{if $customerlist[customerlist].account && !$customerlist[customerlist].nodeac} blend{/if}" onmouseover="addClass(this, 'highlight')" onmouseout="removeClass(this, 'highlight')">[/HTML]
Chodzi mi o to aby pozbyć się w tych znacznikach zdarzeń onmouse i onmouseout, a w zamian dodać do atrybutu class napis "highlight". Może się także zdarzyć że w znaczniku nie ma jeszcze atrybutu class i wtedy należałoby go dodać.
Na razie opanowałem dodawanie w linii nowej klasy css:
Próbuje rozbudować to o usuwanie zdarzeń JS w taki sposób:
ale powoduje to jedynie pojawienie się znaków zachęty (>). Ktoś wie co może być nie tak?
[HTML]<TR class="{cycle}{if $customerlist[customerlist].account && !$customerlist[customerlist].nodeac} blend{/if}" onmouseover="addClass(this, 'highlight')" onmouseout="removeClass(this, 'highlight')">[/HTML]
Chodzi mi o to aby pozbyć się w tych znacznikach zdarzeń onmouse i onmouseout, a w zamian dodać do atrybutu class napis "highlight". Może się także zdarzyć że w znaczniku nie ma jeszcze atrybutu class i wtedy należałoby go dodać.
Na razie opanowałem dodawanie w linii nowej klasy css:
Kod: Zaznacz cały
sed -e '/class=".*highlight/ s/class="/class="highlight /' customerlist.html > customerlist.html.out
Kod: Zaznacz cały
sed -e '/class=".*highlight/ s/class="/class="highlight /' -e '/class=".*highlight/ s/ onmouseover="addClass\(this, \'highlight\'\)" onmouseout="removeClass\(this, \'highlight\'\)"//' customerlist.html > customerlist.html.out