PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit sed



ulzf
08-09-2004, 08:22
Guten morgen allerseits !!!
Ich habe schon wieder ein Problem mit dem Ersetzen in einer datei.

Ausgangssituation:

Die Datei : file1.txt

text text text
text text text
text text text
text text text
#declare ObjectFile = "Ordner/Ordner/filename.ext";
text text text
text text text
text text text
text text text

Ziel: Der Pfad "Ordner/Ordner/filename.ext" muss mit einem anderen ersetzt werden.
Mein einsatz:

string=`cat file1.txt | grep declare\ ObjectFile | cut -d "\"" -f 2`

Als Ausgabe bekomme ich Ordner/Ordner/filename.ext
--> Das ist auch richtig :)
jetzt ist das Problem:

sed -e "s/$string/$new_string/" file1.txt > neu.txt
funzt nicht, auch der Einsatz
sed -e 's/'$string'/'$new_string'/' file1.txt > neu.txt
ich dachte es kann die "/" die in $string sind und deswegen habe ich den Einsatz erwitert auf:

string=`cat file1.txt | grep declare\ ObjectFile | cut -d "\"" -f 2
| sed -e "s/\//\\\\\//g"`
als Ausgage bekomme ich Ordner\/Ordner\/filename.ext
aber leider ohne Ergebnisse. :mad:
Kann mich jemand verbessern bzw. eine Lösung anbieten?

Vielen Dank im Voraus.

peschmae
08-09-2004, 11:27
Ich denke sowas wär was:


NEU=/die/neue/datei
sed "s|#declare ObjectFile = .*\;|#declare ObjectFile = \"$NEU\"\;|" < test.txt


MfG Peschmä

ulzf
09-09-2004, 07:40
Danke für die Antwort !

Ich habe das Problem anders gelöst... :o
mfg

peschmae
09-09-2004, 08:52
Wie?

MfG Peschmä

Michitux
12-09-2004, 11:25
Hallo!

Ich denke sowas wär was:


NEU=/die/neue/datei
sed "s|#declare ObjectFile = .*\;|#declare ObjectFile = \"$NEU\"\;|" < test.txt


Ich hab das gleiche Problem, doch etwas anders:
Ich möchte den Anfang eines Pfades, der in der Variable base ist, entfernen. Der "einfache", aber natürlich nicht funktionierende Aufruf wäre

echo "/pub/multimedia/Januar_2004/Garten/Pflanze/" | sed s/"$base"/""/
doch in $base sind natürlich "/"'s, die Variable $base enthält genauer gesagt einfach /pub/multimedia/Januar_2004 , das Ergebnis sollte also /Garten/Pflanze/ sein (der erste "/" ist egal). Leider kennne ich mich noch nicht so gut mit sed aus, dass ich das anders machen könnte und leider verstehe ich auch nicht, wie der von Peschmä geschriebene Lösungsansatz funktioniert.

Kann mir da jemand (Peschmä?) helfen?

Viele Grüße
Michitux

peschmae
12-09-2004, 13:17
bei sed kannst du statt / auch sonst irgend ein Zeichen als Trenner nehmen - ich habe mir für Pfade das # angewöhnt oder, wenn das auch irgendwo vorkommt kannst du z.B. auch | verwenden. Also sowas:



base=/pub/multimedia/Januar_2004/
echo "/pub/multimedia/Januar_2004/Garten/Pflanze/" | sed "s#$base##"


MfG Peschmä

Michitux
12-09-2004, 13:27
Hallo!

Vielen Dank für den Tipp! Jetzt funktioniert es! (Und ich kann jetzt relative Verknüpfungen erzeugen lassen, die von $base in ein Verzeichnis unterhalb von $base gehen.)


Viele Grüße

Michitux