Przejdź do głównej zawartości

Linux (bash) - zamiana podanej frazy na inną w plikach

W systemach Linux i produktach mających zastosowanie w tym środowisku np.: serwerach aplikacyjnych (jboss, weblogic, tomcat, apache itp) konfiguracja może być wykonywana bezpośrednio w odpowiednich plikach konfiguracyjnych. Często też może pojawiać się taka sytuacja by zmienić ścieżkę do konkretnej lokalizacji, która jest identyczna dla wielu ustawień i tym samym występuję wielokrotnie w danym pliku, może być to również dowolny inny określony daną frazą parametr. Możemy oczywiście zmienić skrupulatnie każde wystąpienie ręcznie przeszukując dokładnie cały plik ale jeżeli jesteśmy pewni, że zmiana ma dotyczyć wszystkich wpisów warto ułatwić sobie to zdanie przy pomocy skryptu, który zapewni że na 100% zmianie poddane zostaną wszystkie wystąpienia, a do tego wykona to błyskawicznie. 

W celu zmiany ścieżki prowadzącej do danej lokalizacji można z powodzeniem wykorzystać narzędzie "sed" co wykonujemy następująco : 

sed -e "s/\/jakas\/domena\//\/zmiana1\/zmiana2\//" -i plik.txt

Polecenie to spowoduje zmianę ścieżki  /jakas/domena na /zmiana1/zmiana2 w pliku plik.txt dla wszystkich wystąpień frazy "jakas/domena. 

Dla zmiany dowolnej frazy można użyć skryptu: 

#!/bin/bash


plik=$1
dozmiany=$2
zmienione=$3


#sprawdzenie czy zmienne sa puste ( -n oznacza jest puste )
until [ -n "$plik" -a -n "$dozmiany" -a -n "$zmienione" ]
do
        echo -en "Podaj nazwe pliku do zmiany ... \r\n"
        read plik
        echo -en "Podaj co zmianiamy ... \r\n"
        read dozmiany
        echo -en "Na co zmieniamy... \r\n"
        read zmienione
done
# powyzej wczytanie wartosci do zmiannych


echo -e "Robie kopie pliku  \r\n"
cp $plik $plik"_$(date +%Y%m%d-%H%M%S)"
echo -e "Podana fraza wystepuje $(grep -o $dozmiany $plik | wc -l) razy \r\n"
echo -e "Dokonuje zmiany z \e[0;31m$dozmiany \e[0m na \e[0;32m$zmienione \e[0m \r\n"
sed -e "s!$dozmiany!$zmienione!g" -i "$plik"

Powyższy skrypt zamieni dowolnie wybraną frazę w wybranym pliku licząc ilość jej wystąpień prowadząc dialog w postaci mini kreatora zmiany. Skrypt tworzy również automatycznie kopię zapasową robioną po każdej zmianie dodając do nazwy pliku odpowiednia informacje tym kiedy dokładnie wprowadzono zmiany.


Komentarze

  1. Można ewentualnie odpalic vim :%s/"tekst który chcemy zmienic"/"na jaki chcemy zmienic"/
    :)

    OdpowiedzUsuń
  2. Jestem pod wrażeniem. Bardzo ciekawie napisany artykuł.

    OdpowiedzUsuń

Prześlij komentarz

Najczęściej czytane w tym miesiącu

50 popularnych pytań dotyczących systemu Linux zadawanych na rozmowach kwalifikacyjnych. (Pytania & Odpowiedzi)

Jak dodać użytkownika w systemie Windows z poziomu konsoli CMD? (net user, net localgroup)

Generowanie testowych plików o określonej wielkości