Anzeige:
Ergebnis 1 bis 2 von 2

Thema: Bash: String zerlegen - mal wieder...

  1. #1
    Registrierter Benutzer
    Registriert seit
    08.01.2001
    Beiträge
    242

    Bash: String zerlegen - mal wieder...

    Hallo,

    ich habe da einen string: d:\\bla\\\blubb\\\\blubber\prog.exe
    und hätte gern sowas draus gemacht: d bla/blubb/blubber prog.exe

    Ein Problem ist, das die Anzahl der "\" durchaus unterschiedlich ist - nicht nach den Sinn fragen, da hab ich keinen Einfluss drauf, ich muss es nur verarbeiten.

    Code:
    echo "d:\\bla\\\blubb\\\\blubber\prog.exe" | sed -e s/:/\ /g | tr \\ /
    das liefert schonmal:
    d /bla//blubb//blubber/prog.exe
    aber wie weiter?

    und kann ich mir das Ergebnis dann in einem Rutsch in 3 Variablen packen, oder geht das nur via:

    Code:
    ERGEBNIS=`echo "string" | sed .....`
    V1=`echo $ERGEBNIS | awk '{print $1}'`
    V2=`echo $ERGEBNIS | awk '{print $2}'`
    V3=`echo $ERGEBNIS | awk '{print $3}'`
    thx,
    tom

  2. #2
    Registrierter Benutzer
    Registriert seit
    20.03.2006
    Beiträge
    180
    > d:\\bla\\\blubb\\\\blubber\prog.exe

    Ich schlage vor, das Windoze-Getöns erst mal auf Linux-Notation zu bringen:

    1. Damit der Rückschrägstrich seine LITERALE Bedeutung beibehält, erst mal die Zeichenkette in eine Datei /tmp/abc1 ablegen (mit Cut & Paste, NICHT mit echo!)

    2. Ersetzen der Rückschrägstriche in normale Schrägstriche:
    cat /tmp/abc1 |sed -e 's/\\\{1,\}/\//g' > /tmp/abc2

    3. Herausziehen der Laufwerksbezeichnung:
    Voraussetzung: Laufwerksbezeichnung steht in Spalte 1!
    LAUFWERK=`cat /tmp/abc2 | awk -F" " '{printf("%s",substr($0,1,1));}'`

    4. Herausziehen des Dateinamens (ohne Lw-Bezeichnung):
    Voraussetzung: Dateiname beginnt ab Position 3!
    FILENAME=`cat /tmp/abc2 | awk -F" " '{printf("%s",substr($0,3))}';

    5. Abspalten von Verzeichnis- und Basisnamen:
    VERZ_NAME=`dirname ${FILENAME}`
    BASIS_NAME=`basename ${FILENAME}`

    Falls Du eine Reihe von in Zeilen angeordneten Windoze-Dateinamen abarbeiten musst, dann packst Du die einzelnen ANweisungen in eine for-Schleife:

    for in in `cat /tmp/DATEI-MIT-WINDOZE-DATEINAMEN` ; do
    echo $i > /tmp/abc1
    .... (die obigen Anweisungen)
    done

    Gruss
    Dieter

Lesezeichen

Berechtigungen

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