Poniższa porada opisuje, jak w prosty sposób, wykorzystując jednolinijkowe skrypty shell wykonać wyszukanie i zmianę tekstu na inny w wielu plikach tekstowych jednocześnie.
Wykonując audyt statycznych stron internetowych, często muszę wykonać szereg powtarzających się zmian w setkach lub nawet tysiącach plików HTML. Wykonywanie takiej operacji “na piechotę” w każdym s plików po kolei trwałoby kilka tygodni, jednak wcale nie trzeba robić tego w ten sposób. Z pomocą przychodzą skrypty powłoki shell.
Złożone zastąpienia tekstu w wielu plikach jednocześnie można wykonać na wiele sposobów, jednak chyba najprostszym z nich są krótkie, jednolinijkowe skrypty perl. Poniższe przykłady ilustrują sposób pisania takich skryptów.
#dodanie do tytułu każdej strony końcówki " - Pomocnik IT"
perl -pi -w -e 's/<\/TITLE>/ \- Pomocnik IT<\/TITLE>/g;' *.html
#zmiana adresu email z adam@it-pomocnik.org na ania@it-pomocnik.org
perl -pi -w -e 's/adam\@it\-pomocnik\.org/ania\@it\-pomocnik\.org/g;' *.html
Powyższe skrypty edytują wszystkie pliki HTML z bieżącego katalogu. Po drobnej modyfikacji można je oczywiście wykorzystać do modyfikacji plików tekstowych o innych rozszerzeniach. Zwróć uwagę, że przed każdym znakiem specjalnym w zmienianych tekstach należy wstawić znak backslash, aby skrypt traktował je jako część napisu, a nie przełączniki opcji w skrypcie.


#1 by Tybek on April 19th, 2008
>najprostRZym
LOL
#2 by pukas on April 20th, 2008
o shit
#3 by zenek on May 25th, 2009
A jak zrobic tak aby skrypt wchodzil we wszystkie podrzedne katalogi i zmienial. Bo przy 100 podkatalogach jest problem.
#4 by squirell on September 12th, 2009
do zenek:
find . -type f | while read a
do
cat $a | sed -e ’s/\/TITLE>/ \- Pomocnik IT/g’ > $a.tmp
mv $a.tmp $a
done
czyli bashem go
#5 by Kuba on November 20th, 2009
Ja mam inny problem – w plikach php jakiś wirus nadpisał mi kilkanaście lini kodu na początku każdego pliku. Wygląda to mniej więcej tak:
(wyciąłem sporo ze środka, żeby nie wydłużać komenta)
Wiem jak to zdekodować, wyskakuje ukryta ramka z której ładują sie trojany. Jak można to usunąć? Chodzi mi o zapis rekurencyjny (przeryje wszystkie podkatalogi w zadanym katalogu) i wyczyści wszystko pomiędzy . Każdy zapis sie różni, więc chyba jakieś wyrażenie regularne by musiało być. Jak zostanie mi samo to to już łatwo usunę. Proszę o pomoc!