Hallo zusammen!!
Bin gerade dabei ein paar BASH Skripte zu schreiben und hänge an einem Problem fest.
Ich habe eine Datei in der pro Zeile ein Verzeichnissname steht. Es sind auch Verzeichnisse mit Leerzeichen dabei z.b. Mysql Datenbank
Diese Datei soll weiter verarbeitet werden, jedoch brauche ich in jeder Zeile am Anfang und am Ende ein ” !! Ich bin nun auf der Suche nach einer Möglichkeit die Datei dahingehend zu erweitern!! Hat jemand eine Idee wie es mit SED oder awk oder ähnlichem funktioneren kann?
Danke schon mal
Dracko
Hallo!
Eine Moeglichkeit mit Perl:
cat test.txt | perl -ne ‘chomp($_);print “\””.$_.”\”\n”;’
mfG
Philipp
Hallo,
vielleicht hilft Dir scho das:
sed -e s/^/\”/ filex > filey
sed -e s/$/\”/ filey > filex
Irgendwie konnte man das auch zusammenfassen, z.B. als sed-script.
Komm aber gerade nicht drauf
Gruß
hmhweb
Übrigens das geht so:
sed -e ‘s/\(.*\)/”\1″/’
Hi, wenn ich das Problem richtig weiter gedacht habe, brauchst du die ” (Anführungszeichen), um die Verzeichnisse wieter in der Shel zu verarbeiten (zum Beispiel in einer Schleife). Da brauchst du dir denke ich keine Verrenkungen via sed oder awk einfallen lassen.
Dafür gibt es IFS, das ist die Shellvariable, die bestimmt, welches Zeichen Parameter, bzw in einer Schleife Elemente voneinander trennt. Per Default ist IFS nicht belegt, und die Bash nimmt als Default einfach Leerzeichen und TABs an. (siehe for i in a b c d e; do echo $i ; done)
Wenn du nun den Zeilenumbruch als Feldtrenner setzt, wird eine for Schleife über den Inhalt deiner Datei die einzelnen Zeilen als Laufvariable verwenden!
IFS=$’\n’
for i $(cat DATEI); do
echo $i
done
unset IFS
So könnte das Stück Code dazu aussehen. Wichtig ist es, irgendwann IFS wieder auf leer zu setzten, damit deine Shell wieder normal arbeitet!
Grüße,
Ralf
for i $(cat DATEI); do Alternativ
for i $(
Hallo,
ich mag sehr gern die Schreibweise
while read line
do
test -d “$line” && echo “dir: $line”
test -f “$line” && echo “fil: $line”
test -L “$line” && echo “lnk: $line”
…
done < datei
Wenn es aber nur darum geht, die Filenamen weiterzuverarbeiten,
muß und sollte man sich nicht die Mühe machen, sie mit "" zu umgeben.
Die Shell kann wunderbar mit Variablen umgehen, deren Inhalt auch
Leerzeichen enthält. Man muß nur darauf achten, daß man die Variable
immer mit "" quotet, wenn man sie verwendet. Es ist ein Unterschied,
ob die Variable oder der Inhalt die Quotes enthält!
Meistens will man gerade nicht, daß der Inhalt sich ändert.
Also immer brav "$i" schreiben, dann kommt die Shell auch nicht
durcheinander.
Interessant ist übrigens auch, daß aus historischen Gründen an
einigen Stellen keine Quotes nötig sind, auch wenn eine Variable
Leerzeichen enthält, z.B. bei den Positionsparametern $1..$9.
#!/bin/sh
# hier braucht man kein Quote, selbst beim Aufruf ./xxx "a b c"
myarg1=$1
# hier aber schon, sonst sieht die sh mkdir a b c und nicht mkdir "a b c"
mkdir "$myarg1"
Wenn es unbedingt sein muß, kann man mit den üblichen regex-fähigen
Tools die Quotes am Anfang und Ende dazubauen.
x="$(echo "$x" | sed -e s/'^'/'\"'/ -e s/'$'/'\"'/)"
oder
x="\"$x\""
Ich bevorzuge die Variante, die keine Subshell+Pipe benötigt.
na da haben wir mal wieder ein Fall “useless use of cat”. Stat “cat test.txt | blah” kannst Du: “blah
Hallo!
“useless use of cat”. Kommt drauf an. Ich lese gern von links nach rechts. Bzw. wandern die Daten bei mir von links (cat) nach rechts (perl, dann meist noch ein “| less”). Und ich schreibe das auch gern in der Reihenfolge: mit cat mal schauen, ob die Datei bzw. deren Inhalt passt, dann erst der perl-Befehl basteln und da muss ich meist das Programm am Ende der Zeile anpassen, was am Besten geht, wenn nichts mehr folgt.
Ich bin eigentlich auch dagegen etwas nur in einer Zeile zu programmieren, aber leider heisst es Kommandozeile und nicht Kommandozeilen (kann man zwar in der bash auch irgendwie hinkriegen, ist aber etwas umstaendlich – bashhistory etc.).
Aber prinzipiell hast Du recht: man kann es auch kuerzer schreiben. Nur finde ich kurz auch nicht immer gut (darum hasse ich tlw. die C-Gurus: alles in eine Zeile quetschen was geht, auch wenn die Lesbarkeit leidet).
mfG
Philipp