Strona 1 z 2

[+] Bash - polecenie sed (jak użyć zmiennych?)

: 21 sierpnia 2016, 20:01
autor: axel.ziom
Witam, potrzebuję pomocy nieco z napisaniem skryptu. Potrzebuję wyciagnąć pierwszą linię z pliku dhcpd.conf i wpisać ją do zmiennej. Następnie za pomocą inputbox chcę pobrać dane od użytkownika, aby starą zmienną "x" zamienić nową zmienną "inout". Nie wiem dlaczego, ale nie przechodzi mi polecenie sed zapisane w ostatniej linijce. Cały czas otrzymuję błąd:
sed: -e wyrażenie #1, znak 0: brak poprzedniego wyrażenie regularnego

Kod: Zaznacz cały

x = `sed -n 1p /etc/dhcp/dhcpd.conf`
dialog --title "wprowadz nowa wartosc" --backtitle "program" --inputbox "wprowadz wartosc" 7 60 2>temp
inout = $(cat temp)
sed -i "s/${x}/${inout}/g" /etc/dhcp/dhcpd.conf 
Zrobiłem mały test. Kiedy dodałem kod jak poniżej, wtedy się udało. Podstawiło string na zmienną inout.

Kod: Zaznacz cały

sed -i "s/tekst_szukany/${inout}/g" /etc/dhcp/dhcpd.conf 
Jednak nadal gdy próbuję podstawić zmienną na zmienną otrzymuję błąd.

Bardzo proszę o pomoc.

Re: Bash - polecenie sed (jak użyć zmiennych?)

: 21 sierpnia 2016, 21:03
autor: dedito
Po co definiujesz zmienną inout skoro masz ją w temp?
Nie prościej "kazać" sed pobrać linijkę z temp?

Re: Bash - polecenie sed (jak użyć zmiennych?)

: 21 sierpnia 2016, 21:07
autor: axel.ziom
Też racja, jednak zmienna inout działa prawidłowo. Problem jest ze zmienną x, a dokładniej z zapisem sed. Przekopałem całe google, napisałem kilkadziesiąt kombinacji z tego co znalazłem.. i niestety nic.

Re: Bash - polecenie sed (jak użyć zmiennych?)

: 21 sierpnia 2016, 21:11
autor: dedito
A spróbowałeś tak:

Kod: Zaznacz cały

x = $(sed -n 1p /etc/dhcp/dhcpd.conf)
?

Re: Bash - polecenie sed (jak użyć zmiennych?)

: 21 sierpnia 2016, 21:19
autor: axel.ziom
Tak, rezultat ten sam. Zabrakło mi już pomysłów. Najlepsze jest to, że string wchodzi normalnie, dlatego dziwi mnie to, że po wstawieniu zmiennej w wyrażenie szukane występuje błąd.
A masz może jakiś pomysł jak podstawić za pomocą innego narzędzia zmienną na zmienną w pliku ?

Re: Bash - polecenie sed (jak użyć zmiennych?)

: 21 sierpnia 2016, 21:27
autor: dedito
A co zwróci polecenie:

Kod: Zaznacz cały

echo ``x = $(sed -n 1p /etc/dhcp/dhcpd.conf)``
Nie pisz posta pod poste. Używaj edycji.

Re: Bash - polecenie sed (jak użyć zmiennych?)

: 21 sierpnia 2016, 21:28
autor: axel.ziom
Udało się :)

Kod: Zaznacz cały

sed -i "s/$(sed -n 1p /etc/dhcp/dhcpd.conf)/${inout}/g" /etc/dhcp/dhcpd.conf
Dziękuję za wskazówkę. Wreszcie mogę dopracować skrypcik.

DZIĘKUJĘ! Można zamykać.

Re: Bash - polecenie sed (jak użyć zmiennych?)

: 21 sierpnia 2016, 21:29
autor: dedito
Oznacz wątek zgodnie z regulaminem.

Re: Bash - polecenie sed (jak użyć zmiennych?)

: 21 sierpnia 2016, 21:39
autor: lizard
Po pierwsze, co zawierają zmienne $x i $inout? Jeśli jest w nich '/', to sed głupieje. Jakiej wartości spodziewasz się w zmiennej $x?

Jeśli chcesz zmienić tylko pierwszą linię w pliku, to proponuję skorzystać z tail:

Kod: Zaznacz cały

dialog --title "wprowadz nowa wartosc" --backtitle "program" --inputbox "wprowadz wartosc" 7 60 2>temp
tail -n+2 /etc/dhcp/dhcpd.conf | cat test - > /etc/dhcp/dhcpd.conf
Aby zmienić wszystkie linie identyczne z pierwszą spróbuj tego:

Kod: Zaznacz cały

sed -e "/${x}/c\\${inout}" /etc/dhcp/dhcpd.conf

Re: [+] Bash - polecenie sed (jak użyć zmiennych?)

: 21 sierpnia 2016, 21:50
autor: axel.ziom
Dla zmiennej $x jest wycięta linia:

Kod: Zaznacz cały

subnet 10.0.2.0 netmask 255.255.255.0
Co do zmiennej $inout, będzie to nowa wartość dla podsieci i maski sieciowej.

Muszę zrobić test również z tail, zgodnie z tym co mi poleciłeś.

Dziękuję.