[BASH] znaki / w zmiennej a sed

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
fotex
Piegowaty Guziec
Piegowaty Guziec
Posty: 7
Rejestracja: 09 cze 2008, 22:25
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME

Post autor: fotex »

mam maly problemjest plik który zawiera linie :
JAVA_HOME=

moim celem jest zamiana tej linii na JAVA_HOME=$zmienna

gdzie $zmienna to wartość podawana przez uzytkownika....

$zmienna jest ścieżką wiec zawiera znaki /
gdy daje na sztywno ścieżke to wszystko jest ok i ladnie zmienia wartosc w pliku....jednak gdy chce wykorzystac zmienna to okazuje sie ze czysci cały plik.


moja funkcja
Działajaca:
sed "s/JAVA_HOME=/JAVA_HOME=\/usr\/bin\/java;/g"
niedziałajaca
sed "s/JAVA_HOME=/JAVA_HOME=$zmienna;/g"

bardzo prosze o jakieś wskazówki bo walcze z tym od wczoraj i nie mam juz pomyslów

EDIT:
juz sobie poradzilem

rozwiazanie :

wystarczy na zmiennej zastosować sed przed jej wyswietleniem.....
w moim przypadku wystarczylo zamienic znaki / w zmiennej na \/ przed zastosowaniem w kolejnym wyrazeniu regularnym

sed 's/\//\\\//g' input \ > input.new
zmienna=`cat input.new

sed "s/JAVA_HOME=/JAVA_HOME=$zmienna;/g"
Awatar użytkownika
borzole
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 127
Rejestracja: 10 sie 2010, 11:48
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: [BASH] znaki / w zmiennej a sed

Post autor: borzole »

Kod: Zaznacz cały

#!/bin/bash

zmienna="/jakaś ścieżka/do folderu"

# sposób 1: użyć innego znaku jako separatora w sed
echo -e "JAVA_HOME=" | sed s:JAVA_HOME=:JAVA_HOME="'$zmienna'":

# sposób 2: "wyeskejpować" niewygodne znaki w pomocniczej zmiennej
tmp=$(echo -e "$zmienna" | sed s:/:\\\\/:g )
echo test: $tmp
echo -e "JAVA_HOME=" | sed s/JAVA_HOME=/JAVA_HOME="'$tmp'"/
fotex
Piegowaty Guziec
Piegowaty Guziec
Posty: 7
Rejestracja: 09 cze 2008, 22:25
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME

Odp: [BASH] znaki / w zmiennej a sed

Post autor: fotex »

borzole pisze:

Kod: Zaznacz cały

#!/bin/bash

zmienna="/jakaś ścieżka/do folderu"

# sposób 1: użyć innego znaku jako separatora w sed
echo -e "JAVA_HOME=" | sed s:JAVA_HOME=:JAVA_HOME="'$zmienna'":

# sposób 2: "wyeskejpować" niewygodne znaki w pomocniczej zmiennej
tmp=$(echo -e "$zmienna" | sed s:/:\\\\/:g )
echo test: $tmp
echo -e "JAVA_HOME=" | sed s/JAVA_HOME=/JAVA_HOME="'$tmp'"/

dzieki za odzew ale jak widzac wpadlem na to samo...tak czy inaczej dzieki za checi :D
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

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