Jak zakomentować i odkomentować linię w pliku html za pomocą perla inicjowanego ze skryptu w bashu


(marson1) #1

Witajcie

Temat może jest mało zrozumiały ale już tłumaczę o co chodzi potrzebuję napisać 2 skrypty w bashu, jeden komentujący konkretną linię w pliku html i drugi, który ją odkomentuje, wiem, że wydaje się to głupie ale uwierzcie, ma to swój cel. Na serwerze, na którym będę odpalał te skrypty mam perla, więc pomyślałem, że użyję właśnie jego. Linia do zakomentowania ma postać.

Informacja zamieszczona w dniu <STRONG>{DATE}</strong>

tak więc linia opatrzona komentarzem ma postać:

<!-- Informacja zamieszczona w dniu <STRONG>{DATE}</strong> -->

Potrzebuję utworzyć 2 skrypty, z których pierwszy doda znaki komentarza do wskazanej linii a drugi je z niej usunie. Napisałem coś takiego:

#!/bin/sh
perl -pi -e "s/Informacja zamieszczona w dniu <STRONG>{DATE}</strong>/<!--Informacja zamieszczona w dniu <STRONG>{DATE}</strong> -->/g" ../tpl_color/mercury_articles.html

ale niestety dostałem następujący komunikat:

podejżewam, że powodem błędu jest wykrzyknik w poleceniu a wymagany dla komentarza w html.

Innym pomysłem jest też usunięcie linii zamiast jej komentowanie, ale nie mam pomysłu jak ją dodać w drugim ze skryptów w konkretne miejsce, np. definiując nr. linii poniżej której ma zostać wstawiony wcześniej usunięty kawałek kodu. Pomoże ktoś?


(Pablo_Wawa) #2

Nie znam zbytnio perla, ale może powodem problemów nie jest wykrzyknik, ale znaki większe i mniejsze (tj. “<” i “>”), które powodują przekierowanie wejścia i wyjścia skryptu? Musisz je “wyescapować” (jak to się robi w perlu nie wiem ale w DOS/cmd.exe wstawia się znak caret “^”).

EDIT: pewnie tak jak w PHP (w wyrażeniach regularnych), czyli być może poprzez backslash. Być może powodem problemów jest użycie w napisie znaku slash “/” (zamknięcie tagów). Poniżej propozycja kodu (do sprawdzenia):

#!/bin/sh
perl -pi -e "s/Informacja zamieszczona w dniu \<STRONG\>{DATE}\<\/strong\>/\<!--Informacja zamieszczona w dniu \<STRONG\>{DATE}\<\/strong\> --\>/g" ../tpl_color/mercury_articles.html

 


(marson1) #3

Witaj dzięki za pomoc - podany przez Ciebie kod działa tzn komentuje odpowiednią linię tylko mam prośbę. Jestem osobą mocno niedowidzącą i w kodzie mieszają misię te znaczniki, mógłbyś jeszcze napisać odwrócony kod? tzn by linia:

<!-- Informacja zamieszczona w dniu <STRONG>{DATE}</strong> -->

została zamieniona na:

Informacja zamieszczona w dniu <STRONG>{DATE}</strong>

wiem, że to idiotyczne bo wystarczy odwrócić polecenie ale naprawdę chwila wpatrywania się w kod i mam czarną plamę przed oczami a z kolei gadaczka, z której na co dzień korzystam przy takim kodzie okazuje się bezużyteczna bo znaki <> pomija.


(Pablo_Wawa) #4

Prosze bardzo:

#!/bin/sh
perl -pi -e "s/\<!--Informacja zamieszczona w dniu \<STRONG\>{DATE}\<\/strong\> --\>/Informacja zamieszczona w dniu \<STRONG\>{DATE}\<\/strong\>/g" ../tpl_color/mercury_articles.html

I cieszę się, że wcześniejszy kod zadziałał, bo napisałem go “na sucho” (bez sprawdzania czy w ogóle zadziała), w dodatku późno w nocy. :slight_smile: