Anzeige:
Ergebnis 1 bis 6 von 6

Thema: unerklärliche Ausgabe von sed?

  1. #1
    Registrierter Benutzer
    Registriert seit
    14.10.2009
    Beiträge
    7

    unerklärliche Ausgabe von sed?

    Hallo,

    habe follgenden Codeschnipsel:

    Code:
    		echo $1
    		echo $2
    		echo $dir
    		echo "=="
    		neu=`echo $dir|sed -e s#$1#$2#g`
    		echo $neu
    und die Ausgabe ist:

    Code:
    .
    /home/mpw/testbilder2
    ./audi_klein
    ==
    /home/mpw/testbilder2/home/mpw/testbilder2/home/mpw/testbilder2/home/mpw/testbilder2/home/mpw/testbilder2/home/mpw/testbilder2/home/mpw/testbilder2/home/mpw/testbilder2/home/mpw/testbilder2/home/mpw/testbilder2/home/mpw/testbilder2/home/mpw/testbilder2
    Denk ich falsch oder was ist los? Meiner Meinung nach muss herauskommen:

    Code:
    .
    /home/mpw/testbilder2
    ./audi_klein
    ==
    /home/mpw/testbilder2/audi_klein
    Was habe ich falsch geamcht? Verstehe echt die Welt nicht mehr, warum kopiert der den Pfad so oft hintereinader?

    Danke für Tipps.

    Gruß
    MPW

  2. #2
    Registrierter Benutzer
    Registriert seit
    14.10.2009
    Beiträge
    7
    Hab's nochmal weiter getestet. Der spinnt doch völlig.

    Hatte befürchtet, da der Teil in einer Schleife hängt, dass da iwo noch eingepfuscht wird, aber dem ist nicht so. Der arbeitet anscheinend wirklich so.

    Habe ein neues Skript zum testen gemacht:

    Code:
    eins="."
    zwei="/home/mpw/testbilder"
    dir="./audi_klein"
    neu=`echo $dir | sed -e s#\$eins#\$zwei#g`
    echo $neu
    ergibt

    Code:
    /home/mpw/testbilder/home/mpw/testbilder/home/mpw/testbilder/home/mpw/testbilder/home/mpw/testbilder/home/mpw/testbilder/home/mpw/testbilder/home/mpw/testbilder/home/mpw/testbilder/home/mpw/testbilder/home/mpw/testbilder/home/mpw/testbilder
    Warum kommt nicht

    Code:
    /home/mpw/testbilder/audi_klein
    raus?

    Ich begreif's echt nicht...

    Gruß
    MPW

  3. #3
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    Das Problem ist folgendes:
    Code:
    #.#blubb#
    matcht ein beliebiges Zeichen (.) und ersetzt es mit blubb. Wenn du das nun global machst, wird jedes Zeichen deines Inputstrings mit 'blubb' ersetzt. Das kannst du verhindern indem du '\.' verwendest um nur einen . zu matchen.
    my very own 128 bit integer
    C4 D3 B8 A8 9E A0 C6 EC 7D EC A8 15 28 D1 92 58
    more information

  4. #4
    Registrierter Benutzer
    Registriert seit
    14.10.2009
    Beiträge
    7
    Danke, jeebee.

    Hatte echt schon an mir selbst gezweifelt.

    D.h. ist sollte dann vorher pauschal in $1 alle . durch \. ersetzen.

    Quasi dann
    Code:
    iwas='echo $1|sed -e s#\.#\\\.#g'
    und dann $iwas statt $1?

    Werde ich nachher mal probieren.

    Danke für den Tipp.

    Gruß
    MPW

  5. #5
    Registrierter Benutzer
    Registriert seit
    14.01.2002
    Beiträge
    657
    nutz besser
    mkdir ${dir//$1/$2}
    das ist dann ein direkter string replcae ohne reguläre ausdrücke, welche du auch nicht brauchst.

  6. #6
    Registrierter Benutzer
    Registriert seit
    14.10.2009
    Beiträge
    7
    Hi,

    danke für den Tipp. Das sieht sehr einfach und elegant aus.

    Habe zwar das andere schon ans Laufen bekommen, aber werde das auch mal testen.

    offtopic: Gibt's hier eigentlich im Forum die Möglichkeit ein Thema als gelöst zu markieren?

    Gruß
    MPW

Lesezeichen

Berechtigungen

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