[bash]Leerzeichen mit backslash schützen

Dieses Thema: "[bash]Leerzeichen mit backslash schützen" im Forum "Shell-Skripte" wurde erstellt von Phate, 09.11.2004.

  1. Phate

    Phate Frickler/Kellerkommunist

    Dabei seit:
    08.02.2004
    Beiträge:
    261
    Zustimmungen:
    0
    Ort:
    Rheinland
    Hi,
    ich habe ein script geschrieben welches mit lame mp3s konvertiert. Nun habe ich das Problem, daß einige mp3s massig Leerzeichen im Namen haben, was lame verwirrt und zu eineer Fehlermeldunng führt. Angenommen ich habe ein Verzeichnis mit mp3s die ich konvertieren möchte, so schreibe ich sie mit ls in eine Datei und übergebe jede Zeile (jede mp3) in einer while read-Schleife an lame.
    Wie kann man jetzt vor die Leerzeichen backslashes setzen?

    Code:
    #!/bin/bash
    ls | grep .mp3 > file
    
    while 
      read var
    do
      echo $var
      echo "encoding $var"
    # Hier muß jetzt aus "foo bar bla fasel.mp3" "foo\ bar\ bla\ fasel.mp3" gemacht  werden. 
      $LAME -b 128 $var "new_"$var
    done < file
    
    Danke!
     
  2. Anzeige

    schau mal hier --> (hier klicken). Viele Antworten inkl. passender Shell-Befehle!
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. Cyber

    Cyber .:DISTORTED:.

    Dabei seit:
    16.05.2003
    Beiträge:
    999
    Zustimmungen:
    0
    Ort:
    D -> BW -> Karlsruhe
    Ha mit sed. mal ohne das jetzt geprüft zu haben (weil grad kein gescheites OS zur Hand)
    würd ich mal sagen:
    Code:
    sed -e 's/\ /\\\ /g'
    
    probiers halt mal in ner bash mit nem echo.
     
  4. Phate

    Phate Frickler/Kellerkommunist

    Dabei seit:
    08.02.2004
    Beiträge:
    261
    Zustimmungen:
    0
    Ort:
    Rheinland
    Danke funktioniert! :)
    Eine Frage noch zu sed, laut man-page ersetze ich einen ausdruck durch den nächsten, also sed 's/oldexpr/newexpr/g' .. gut, aber wieso dann drei backslashes bei dem neuen Ausdruck? Muß man den backslash in der shell wiederum mit einem backslash schützen?
     
  5. Cyber

    Cyber .:DISTORTED:.

    Dabei seit:
    16.05.2003
    Beiträge:
    999
    Zustimmungen:
    0
    Ort:
    D -> BW -> Karlsruhe
    Ja genau. Sonderzeichen müssen, sobald sie als "funktionsloses Zeichen" verwendet werden sollen anhand eines Backslashes kenntlich gemacht werden. Das ist nicht nur bei der bash so. Schau Dir mal ein wenig Doku zum Thema regexp (Regular Expressions) an.
     
  6. oenone

    oenone Freier Programmierer[Mod]

    Dabei seit:
    22.08.2002
    Beiträge:
    599
    Zustimmungen:
    0
    Ort:
    Mannheim
    schon mal mit anfuehrungszeichen versucht? "$var" ?

    auf bald
    oenone
     
  7. Cyber

    Cyber .:DISTORTED:.

    Dabei seit:
    16.05.2003
    Beiträge:
    999
    Zustimmungen:
    0
    Ort:
    D -> BW -> Karlsruhe
    Jo klar, das sollte natürlich auch gehen, hätt ich auch dran denken können. Scripte mit awk & sed geben halt mehr her :]
     
  8. Phate

    Phate Frickler/Kellerkommunist

    Dabei seit:
    08.02.2004
    Beiträge:
    261
    Zustimmungen:
    0
    Ort:
    Rheinland
    Danke...
    ;(
     
  9. humph

    humph Grünschnabel

    Dabei seit:
    10.02.2005
    Beiträge:
    1
    Zustimmungen:
    0
    Prost Gemeinde,

    Danke an Phate... sein Problem hat meines gelößt, habe ich doch damit gekämpft die Dateien mit einen "for var in `ls -1`"-Konstrukt zu lesen, was so gar nicht klappen will.

    Hier noch eine Möglichkeit um sich das von Cybermarc vorgeschlagene
    Code:
    sed -e 's/\ /\\\ /g'
    zu umgehen.
    Es gibt bei ls zumindest unter Linux einen eine Option namens --quoting-style kurz -b:

    Code:
    ls -b| grep .mp3 > file
    sollte also tun.

    Gruß,
    Humph
     
  10. Cyber

    Cyber .:DISTORTED:.

    Dabei seit:
    16.05.2003
    Beiträge:
    999
    Zustimmungen:
    0
    Ort:
    D -> BW -> Karlsruhe
    Jo, aber ein kleiner Fehler ist noch drinne. Es kann ja auch sein, das die Files eine Endung ala .MP3 .Mp3 oder .mP3 haben, daher sollte grep mit der Option -i verwendet werden.
    Code:
    ls -b | grep -i .mp3 >file
    
     
  11. oenone

    oenone Freier Programmierer[Mod]

    Dabei seit:
    22.08.2002
    Beiträge:
    599
    Zustimmungen:
    0
    Ort:
    Mannheim
    oder gleich ls *.[mM][pP]3

    auf bald
    oenone
     
Thema:

[bash]Leerzeichen mit backslash schützen