[Solved] SED - zastępowanie ciągu znaków z uwzględnieniem ukośników

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
GrzegorzJZD
Sędziwy Jeż
Sędziwy Jeż
Posty: 54
Rejestracja: 05 lut 2007, 12:57
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: KDE Plasma
Kontakt:

[Solved] SED - zastępowanie ciągu znaków z uwzględnieniem ukośników

Post autor: GrzegorzJZD »

Witam

Mam problem ze zmianą zawartości pliku, chodzi o zmianę zmiennej w pliku konfiguracyjnym Asteriska. Po skompilowaniu otrzymujemy skrypt sterowania usługą, w którym znajduje się zmienna AST_SBIN=__ASTERISK_SBIN_DIR__, chodzi o to, aby zamienić znaleziony wiersz na AST_SBIN=/usr/sbin.

Kod: Zaznacz cały

#find /home/ubuntu/asterisk-1.8.13.0/contrib/init.d/ -name rc.debian.asterisk -exec sed -i 's/"AST_SBIN=__ASTERISK_SBIN_DIR__"/"AST_SBIN=/usr/sbin"' {} \;
lub

Kod: Zaznacz cały

#cat /home/ubuntu/asterisk-1.8.13.0/contrib/init.d/rc.debian.asterisk | sed 's/__ASTERISK_SBIN_DIR__/\/usr\/sbin' > /etc/rc.d/init.d/asterisk
Niestety przy próbie wykonania powyższego kodu otrzymuję błąd:

Kod: Zaznacz cały

sed: -e wyrażenie #1, znak 47: nieznana opcja dla polecenia `s'
W jaki sposób podstawić w miejsce wyszukanej frazy wyrażenie zawierające ukośniki? :pt36:
Ostatnio zmieniony 25 cze 2012, 22:08 przez GrzegorzJZD, łącznie zmieniany 1 raz.
Awatar użytkownika
ethanak
Wygnańcy
Posty: 3054
Rejestracja: 04 gru 2007, 13:19
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Bielsko-Biała
Kontakt:

Re: SED - zastępowanie ciągu znaków z uwzględnieniem ukośników

Post autor: ethanak »

A kto Ci takich bzdur naopowiadał że delimiterem dla seda ma być slash?
Man sed - przeczytać, przyjąć do wiadomości, zrobić i dodać "solved" w temacie.
GrzegorzJZD
Sędziwy Jeż
Sędziwy Jeż
Posty: 54
Rejestracja: 05 lut 2007, 12:57
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: KDE Plasma
Kontakt:

Re: SED - zastępowanie ciągu znaków z uwzględnieniem ukośników

Post autor: GrzegorzJZD »

Próbowałem z innymi delimiterami, jak !, @, czy , w żadnym wypadku nie działa. A dokumentacja SED-a mówi przede wszystkim o "/" jako delimiterze, zatem przeczytaj i unikaj zbędnego wymądrzania się.
Awatar użytkownika
ethanak
Wygnańcy
Posty: 3054
Rejestracja: 04 gru 2007, 13:19
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Bielsko-Biała
Kontakt:

Re: SED - zastępowanie ciągu znaków z uwzględnieniem ukośników

Post autor: ethanak »

To chyba masz innego seda bo u mnie działa. I chyba inną dokumentację...
Mały 1
Zakręcona Traszka
Zakręcona Traszka
Posty: 548
Rejestracja: 24 sty 2008, 15:55
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: LXDE
Architektura: x86_64

Re: SED - zastępowanie ciągu znaków z uwzględnieniem ukośników

Post autor: Mały 1 »

Kod: Zaznacz cały

awk '{sub("AST_SBIN=__ASTERISK_SBIN_DIR__", "AST_SBIN=/usr/sbin")}1' plik
GrzegorzJZD
Sędziwy Jeż
Sędziwy Jeż
Posty: 54
Rejestracja: 05 lut 2007, 12:57
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: KDE Plasma
Kontakt:

Re: SED - zastępowanie ciągu znaków z uwzględnieniem ukośników

Post autor: GrzegorzJZD »

Mały 1: dzięki, zależało mi, aby wprost odwołać się do SED-a.
ethanak: No najwyraźniej. Problem leżał w brakujący delimiterze "zamykającym", a nie wykorzystanym jako delimiter znaku.

Rozwiązanie poniżej:

Kod: Zaznacz cały

#sed 's/AST_SBIN=__ASTERISK_SBIN_DIR__/AST_SBIN=\/usr\/sbin/' /home/ubuntu/asterisk-1.8.13.0/contrib/init.d/rc.debian.asterisk > /etc/rc.d/init.d/asterisk
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 4 gości