MitS Napisano Listopad 15, 2006 Zgłoszenie Share Napisano Listopad 15, 2006 Witam! Na początku chciałem powiedzieć, iż nie jestem pewien czy w dobrym dziale umieściłem moje pytanie, wiec proszę się nie złościć za pomyłkę ok a teraz przejdę do mojego pytania. Dla przykładu mam sobie plik HTML i CSS które zwierając np.: HTML <html> <head> <title>{$title} - {$Name}</title> </head> <body id="layout"> <div id="header"> <div class="cooper"></div> </div> <div id="middle"> <table class="sab"> <tr> <td class="bold"></td> </tr> </div> <div id="footer"> <div class="stopka"></div> </div> </body> </html> CSS #layout {background:#ffcc00;} #header {width:500px;} .cooper {border:1px #444 solid;} #middle {margin:0 auto;} table .sab {width:500px;} td .bold {font-weight:bold;} #footer {background:#ccaacc11;} .stopka {height:400px; width:320px; position:absolute; left:500px; top:10px; border:1px #444 solid;} i mój problem polega na tym, iż chcę wykonać zamianę określonych nazw klas (class) i identyfikatorów (id) za jednym zamachem na te same nazwy z tylko tą różnicą, że w każdym zamienionym wyrazie dopisana będzie wartość np. -tic1, i chciałbym wykonać to za pomocą programu Sed lub jakiegoś skryptu, który dał by z tym radę. Czyli plik wynikowy miałby wyglądać tak: HTML <html> <head> <title>{$title} - {$Name}</title> </head> <body id="layout-tic1"> <div id="header-tic1"> <div class="cooper-tic1"></div> </div> <div id="middle-tic1"> <table class="sab-tic1"> <tr> <td class="bold-tic1"></td> </tr> </div> <div id="footer-tic1"> <div class="stopka-tic1"></div> </div> </body> </html> CSS #layout-tic1 {background:#ffcc00;} #header-tic1 {width:500px;} .cooper-tic1 {border:1px #444 solid;} #middle-tic1 {margin:0 auto;} table .sab-tic1 {width:500px;} td .bold-tic1 {font-weight:bold;} #footer-tic1 {background:#ccaacc11;} .stopka-tic1 {height:400px; width:320px; position:absolute; left:500px; top:10px; border:1px #444 solid;} Właśnie najlepiej jak by to było przy pomocy programu sed lecz jak będzie jakiś skrypcik w bashu bądź w C++ to też by było fajnie. Ja próbowałem z tym sed coś porobić ale żadnych efektów. Proszę serdecznie o pomoc. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
jjj Napisano Listopad 25, 2006 Zgłoszenie Share Napisano Listopad 25, 2006 W czystym bashu bez sensu, bo ktos musi te zamiane fizycznie wykonac. W C bez sensu, bo po co pisac program do zamian, skoro sa gotowce. sed, awk, perl -- to jest wlasciwe narzedzie. Dla zamiany wszystkich klas i idów w kodzie HTML dobra bedzie prosta regula sed-a s/[ \t]\(class\|id\)="\([^"]*\)"/ \1="\2-tititi"/g Jezeli piszesz schludny kod, to wystarczy. W kodzie niechlujnym moze sie zdarzyc class= na poczatku wiersza i nie zadziala. Skrypt zamienia jak leci wszystko, co wyglada jak atrybut nie sprawdzajac, czy siedzi w tagu. Wiec jezeli twój html traktuje o xml-u, to sie strzez. Wywolasz go przez sed -f plik_z_regula lub sed -e regula Jezeli za kazdym razem chcesz decydowac o tym, które klasy/idy podmieniasz, zrób sobie (jednak) skrypt shella z grubsza wg wzoru #!/bin/bash NAZWY="$1" sed -e "s/[ \t]\(class\|id\)=\"\($NAZWY\)\"/ \1=\"\2-tititi\"/g" $2 wywolasz go z parametami: co zmieniasz, gdzie zmieniasz: ./skrypt ".*" index.html Dla wielu plików uzywasz jakiejs listy lub petli, np. for (nie testowalem zbyt wnikliwie): #!/bin/bash NAZWY="$1" DOKLEJ="-tititi" mkdir nowe for a in *.htm *.html; do sed -e "s/[ \t]\(class\|id\)=\"\($NAZWY\)\"/ \1=\"\2$DOKLEJ\"/g" $a > nowe/$a done Wolasz taki skrypt 1 parametrem opisujacym zmieniane wartosci klas/idów -- oczywiscie moze to byc wyrazenie regularne. Jezeli ma hurtem leciec po wszystkich klasach, to ./nazwa_twojego_skryptu ".*" Tyle w sprawie szkicu jak to zrobic. Górne ograniczenie finezji i inwencji nie istnieje. No i ucz sie chlopie jezyków: regex, sed, bash, awk, perl. Warto. A regule dla CSS-ów dopisz sobie sam. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się