PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [bash]Leerzeichen mit backslash schützen



Phate
09.11.2004, 10:16
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?



#!/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!

Cyber
09.11.2004, 11:22
Ha mit sed. mal ohne das jetzt geprüft zu haben (weil grad kein gescheites OS zur Hand)
würd ich mal sagen:


sed -e 's/\ /\\\ /g'

probiers halt mal in ner bash mit nem echo.

Phate
09.11.2004, 11:41
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?

Cyber
09.11.2004, 15:37
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.

oenone
09.11.2004, 15:50
schon mal mit anfuehrungszeichen versucht? "$var" ?

auf bald
oenone

Cyber
09.11.2004, 16:00
schon mal mit anfuehrungszeichen versucht? "$var" ?
Jo klar, das sollte natürlich auch gehen, hätt ich auch dran denken können. Scripte mit awk & sed geben halt mehr her :]

Phate
09.11.2004, 16:04
schon mal mit anfuehrungszeichen versucht? "$var" ?


Danke...
;(

humph
10.02.2005, 17:33
Prost Gemeinde,


Wie kann man jetzt vor die Leerzeichen backslashes setzen?


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

sed -e 's/\ /\\\ /g'
zu umgehen.
Es gibt bei ls zumindest unter Linux einen eine Option namens --quoting-style kurz -b:


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

Gruß,
Humph

Cyber
10.02.2005, 19:14
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.


ls -b | grep -i .mp3 >file

oenone
12.02.2005, 00:35
oder gleich ls *.[mM][pP]3

auf bald
oenone