Strona 1 z 1

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

: 24 cze 2012, 19:01
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:

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

: 24 cze 2012, 20:35
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.

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

: 24 cze 2012, 22:10
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ę.

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

: 25 cze 2012, 07:08
autor: ethanak
To chyba masz innego seda bo u mnie działa. I chyba inną dokumentację...

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

: 25 cze 2012, 07:50
autor: Mały 1

Kod: Zaznacz cały

awk '{sub("AST_SBIN=__ASTERISK_SBIN_DIR__", "AST_SBIN=/usr/sbin")}1' plik

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

: 25 cze 2012, 22:07
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