Anzeige:
Ergebnis 1 bis 7 von 7

Thema: Problem mit sed

  1. #1
    Registrierter Benutzer
    Registriert seit
    07.09.2004
    Beiträge
    26

    Problem mit sed

    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:
    Code:
    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:
    Code:
    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:
    Code:
    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.
    Kann mich jemand verbessern bzw. eine Lösung anbieten?

    Vielen Dank im Voraus.

  2. #2
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Ich denke sowas wär was:
    Code:
    NEU=/die/neue/datei
     sed "s|#declare ObjectFile = .*\;|#declare ObjectFile = \"$NEU\"\;|" < test.txt
    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  3. #3
    Registrierter Benutzer
    Registriert seit
    07.09.2004
    Beiträge
    26
    Danke für die Antwort !

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

  4. #4
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Wie?

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  5. #5
    Michitux
    Gast

    Question

    Hallo!
    Zitat Zitat von peschmä
    Ich denke sowas wär was:
    Code:
    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
    Code:
    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

  6. #6
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    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:

    Code:
    base=/pub/multimedia/Januar_2004/
    echo "/pub/multimedia/Januar_2004/Garten/Pflanze/" |  sed "s#$base##"
    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  7. #7
    Michitux
    Gast
    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

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •