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
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:
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ę.