[+] Sed warunkowe przekszta

Potrzebujesz pomocy z C, C++, perl, python, itp.
Unk
Posty: 6
Rejestracja: 04 lipca 2009, 12:08

[+] Sed warunkowe przekształcanie linii

Post autor: Unk »

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:

Kod: Zaznacz cały

sed -e '/class=".*highlight/ s/class="/class="highlight /'  customerlist.html > customerlist.html.out
Próbuje rozbudować to o usuwanie zdarzeń JS w taki sposób:

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
ale powoduje to jedynie pojawienie się znaków zachęty (>). Ktoś wie co może być nie tak?
Czocher
Beginner
Posty: 140
Rejestracja: 26 maja 2007, 23:19

Post autor: Czocher »

Jeżeli owe zdarzenia są na końcu wiersza to po prostu usuń je cutem o tak:

Kod: Zaznacz cały

[czocher@Luna ~]$ cat test
<TR class="{cycle}{if $customerlist[customerlist].account && !$customerlist[customerlist].nodeac} blend{/if}" onmouseover="addClass(this, 'highlight')" onmouseout="removeClass(this, 'highlight')">
[czocher@Luna ~]$ cat test | cut -d ' '  -f1-6 | tr -d '\n' && echo '>' 
<TR class="{cycle}{if $customerlist[customerlist].account && !$customerlist[customerlist].nodeac} blend{/if}">
Unk
Posty: 6
Rejestracja: 04 lipca 2009, 12:08

Post autor: Unk »

Dziękuję, o poleceniu cut nie pomyślałem i napisałem w międzyczasie skrypt w pythonie, który też wykonuje to zadanie.
ODPOWIEDZ