Strona 1 z 1

Sed problem z przetwarzaniem znaku asterisk

: 2013-06-19, 09:14
autor: sl_slack
hej, od pewnego czasu próbuję napisać sobie własny programik w bashu do backupu moich danych i w sumie wszystko ładnie idzie ale nie mogę sobie poradzić z przetworzeniem tekstu w sed, który zawiera w sobie znak '*' szczegóły poniżej

jest sobie zmienna

Kod: Zaznacz cały

exclude_list="test.txt plik.log *.conf"
do której to dopisuję pliki lub katalogi, których nie chce backupować (pliki/katalogi z tej zmiennej dopisywane są do tar z opcją --exclude w innej części programu)
następnie mam okna dialogowe w terminalu i tak:

Kod: Zaznacz cały

....
wyszukaj=`cat backup_config.sh  | grep exclude_list=`
							wyszukaj1=`cat backup_config.sh  | grep exclude_list= | cut -f2 -d '"'`
							dialog --title "Wprowadzanie danych" --inputbox "Podaj katalogi i pliki, które NIE mają być objęte backupem, pliki i katalogi podawaj odzielone od siebie jedynie spacją.\nObecnie NIE archiwizowane dane to: " 16 90 "$wyszukaj1" 2> Tmp/exclude_list.tmp
							zmien=`cat Tmp/exclude_list.tmp`
							spr_dane1=`cat Tmp/exclude_list.tmp | grep --regexp='"'`
							spr=$?
							if [ $spr -eq 1 ]; then
							{
								spr_dane2=`cat Tmp/exclude_list.tmp | grep '\\\'`
								spr2=$?
								if [ $spr2 -eq 1 ]; then
								{		
									 sed -i "s:$wyszukaj:exclude_list=\"$zmien\":g" backup_config.sh
										kod16=$?
										if [ $kod16 -eq 0 ]; then
										{
											dialog --title "Informacja" --backtitle " $backtitle " --msgbox "Operacja zakończyła się sukcesem!" 12 40 	
											opcje_ogolne						 
										}
										else
										{
											dialog --title "Informacja" --backtitle " $backtitle " --msgbox "Operacja zakończyła się błędem, coś jest nie tak....!" 12 40 	
											opcje_ogolne
										}
										fi
...
wydaje mi się, że mój problem znajduje się w poleceniu

Kod: Zaznacz cały

 sed -i "s:$wyszukaj:exclude_list=\"$zmien\":g" backup_config.sh
ponieważ jeśli ze zmiennej

Kod: Zaznacz cały

exclude_list
usunę znak * to wszystko działa dobrze. Macie może jakieś pomysły jak to obejść??

Pozdrawiam :)

Re: Sed problem z przetwarzaniem znaku asterisk

: 2013-06-19, 09:29
autor: webster
Spr

Kod: Zaznacz cały

sed -i "s#${wyszukaj}#exclude_list=\"${zmien}\"#g" backup_config.sh

Re: Sed problem z przetwarzaniem znaku asterisk

: 2013-06-19, 09:35
autor: sl_slack
No nie niestety to też nie zadziałało :) A można jakoś sprawdzić jaki albo czy w ogóle wyskakuje mi jakiś błąd, w konsoli nic nie dostaje bezpośrednio...
Próbowałem już wcześniej rozwiązań ze strony http://stackoverflow.com/questions/1020 ... er-in-bash
czyli coś w stylu

Kod: Zaznacz cały

GLOBIGNORE="*"
curl_opts="-s --noproxy * -O"
curl $curl_opts "$1"  ## no filename expansion
ale też nie pomogło.

Re: Sed problem z przetwarzaniem znaku asterisk

: 2013-06-19, 09:48
autor: webster
a Możesz pokazać wynik echo "sed -i "s#${wyszukaj}#exclude_list=\"${zmien}\"#g" backup_config.sh" przed Jej wykonaniem ?

Re: Sed problem z przetwarzaniem znaku asterisk

: 2013-06-19, 10:00
autor: sl_slack
wyświetliło mi dokładnie tak

Kod: Zaznacz cały

sed -i s#exclude_list="test.txt plik.log *.conf"#exclude_list="test.txt plik.log *.conf test2.file"#g backup_config.sh

Re: Sed problem z przetwarzaniem znaku asterisk

: 2013-06-20, 16:36
autor: Sajmon
$ cat backup_config.sh
exclude_list="test.txt plik.log *.conf"

Kod: Zaznacz cały

sed -i 's#exclude_list="test.txt plik.log \*.conf"#exclude_list="test.txt plik.log \*.conf test2.file"#g' backup_config.sh
$ cat backup_config.sh
exclude_list="test.txt plik.log *.conf test2.file"

Re: Sed problem z przetwarzaniem znaku asterisk

: 2013-06-21, 08:52
autor: sl_slack
Prawde mówiąc to nie rozumiem o co chodzi Ci Sajmon... chyba , że o znak \ ale to nie za bardzo rozwiązuje mój problem, ponieważ zmienna exclude_list jest zmieniana w oknach dialogowych... a poza tym zakazałem wpisywania znaku \ ponieważ gdyby ktoś postawił go na końcu zmiennej exclude_list przed zamykającym znakiem " (cudzysłów) to rozwaliło by mi to cały plik :)
Narazie obszedłem problem tak, że jak ktoś dodaje coś do zmiennej exclude_list ze znakiem *.cos to z automatu zmienia mi znaki *. na ciąg liczb a następnie w innym pliku przy tarowaniu i pobieraniu danych z tej zmiennej, zmieniam na chwile ten ciąg liczb spowrotem na znaki *.

Re: Sed problem z przetwarzaniem znaku asterisk

: 2013-06-21, 12:30
autor: mina86
No bo sobie tylko życie utrudniasz:

Kod: Zaznacz cały

sed s#^exclude_list=".*"#exclude_list="$zmien"#
Nie zmienia to jednak faktu, że $zmien może zawierac dajmy na to “#”.

Re: Sed problem z przetwarzaniem znaku asterisk

: 2013-06-21, 14:58
autor: sl_slack
No wiem, że sobie utrudniam :) ale to dlatego, że nie mogę wyszukać rozwiązania... mina86 Twój przykład już wcześniej też testowałem i nie działał.
Ogólnie problem rozwiązałem "okrężną drogą" ale działającą ;)
btw jeśli ktoś by znalazł sposób bardziej profesjonalny to zawsze chętnie wypróbuje...

pozdrawiam

Re: Sed problem z przetwarzaniem znaku asterisk

: 2013-06-25, 16:53
autor: mina86
Ah no tak, bo zapomniałem o cytowaniu:

Kod: Zaznacz cały

sed "s#^exclude_list=.*#exclude_list='$zmien'#"