Strona 1 z 1

[+] Sed warunkowe przekształcanie linii

: 16 kwietnia 2013, 23:22
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?

: 18 kwietnia 2013, 20:57
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}">

: 20 kwietnia 2013, 14:27
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.