PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu Shellschleife



MC3330
16-11-2010, 17:39
Hallo

ich habe folgende Schleife.



for file in *
do
echo ${file}
sed 's/ / /g' ${file}
done


Sie funktioniert auch soweit, nur leider habe ich jetzt das Problem, dass manchmal Dateien auftauchen, die ein Leerzeichen enthalten. Zum Beispiel die Datei "Test 1.txt". Wenn ich meine Schleife jetzt laufenlassen, wird in ${file} "Test 1.txt" geschrieben. Für meinen SED-Befehl brauche ich aber "test\ 1.txt" damit er die Datei findet.

Hat jemand eine Idee, wie man die Schleife korrigieren kann?

Vielen Dank im Voraus

Gruß Swizz

p.s. Das man Leerzeichen in Dateinamen lassen sollte weiß ich, nur leider werden die mir so vorgesetzt und ich habe keinen Einfluss darauf, wie die Dateien heißen.

msi
16-11-2010, 17:44
Hallo

ich habe folgende Schleife.



for file in *
do
echo ${file}
sed 's/ / /g' ${file}
done


Sie funktioniert auch soweit, nur leider habe ich jetzt das Problem, dass manchmal Dateien auftauchen, die ein Leerzeichen enthalten. Zum Beispiel die Datei "Test 1.txt". Wenn ich meine Schleife jetzt laufenlassen, wird in ${file} "Test 1.txt" geschrieben. Für meinen SED-Befehl brauche ich aber "test\ 1.txt" damit er die Datei findet.

Hat jemand eine Idee, wie man die Schleife korrigieren kann?

Vielen Dank im Voraus

Gruß Swizz

p.s. Das man Leerzeichen in Dateinamen lassen sollte weiß ich, nur leider werden die mir so vorgesetzt und ich habe keinen Einfluss darauf, wie die Dateien heißen.

zB so


find . -maxdepth 1 -type f -print0 | xargs -0n1 sed 's/ / /g'


alternativ " um das ${file}, aber das kann mit sonderzeichen probleme machen

MC3330
18-11-2010, 20:56
Super vielen dank, das klappt sehr gut. Jetzt habe ich aber ein neues Problem.
Die Dateien die ich mit SED bearbeiten möchte sind irgendwie keine richtigen Textdateien. Ich kann sie zwar mit einem Editor öffnen, aber wenn ich versuche mir mit less den Inhalt anzuzeigen, dann kriegeich die Meldung '"test.txt" may be a binary file. See it anyway?'. SED kann die Dateie zwar verarbeiten, allerdings ignoriert es die Dinge die es ändern soll, vermutlich ,weil es den Text nicht richtig "lesen" kann?
Wenn ich den Dateityp mit "file test.txt" bekomme ich "test.txt: data
" zurück.

Gibt es eventuell eine Möglichkeit, dass File so zu konvertieren, dass SED es bearbeiten kann und danach wieder in das ursprücngliche Format zurückkonvertieren?

msi
18-11-2010, 21:01
Super vielen dank, das klappt sehr gut. Jetzt habe ich aber ein neues Problem.
Die Dateien die ich mit SED bearbeiten möchte sind irgendwie keine richtigen Textdateien. Ich kann sie zwar mit einem Editor öffnen, aber wenn ich versuche mir mit less den Inhalt anzuzeigen, dann kriegeich die Meldung '"test.txt" may be a binary file. See it anyway?'. SED kann die Dateie zwar verarbeiten, allerdings ignoriert es die Dinge die es ändern soll, vermutlich ,weil es den Text nicht richtig "lesen" kann?
Wenn ich den Dateityp mit "file test.txt" bekomme ich "test.txt: data
" zurück.

Gibt es eventuell eine Möglichkeit, dass File so zu konvertieren, dass SED es bearbeiten kann und danach wieder in das ursprücngliche Format zurückkonvertieren?

kenne mich mit sed nicht aus, aber perl kommt auf jeden fall damit klar, das kannst du genauso benutzen:

perl -i -pe 's/ersetzdas/durchdas/g' datei.txt

MC3330
18-11-2010, 21:12
Das klappt bei mir leider nicht, ich habe es auch mal mit einem Textfile geschrieben
perl -i -pe 's/ersetzdas/durchdas/g' datei.txt >ergebnis.txt führt bei mir zu einem leeren Textfile.

msi
19-11-2010, 17:24
Das klappt bei mir leider nicht, ich habe es auch mal mit einem Textfile geschrieben
perl -i -pe 's/ersetzdas/durchdas/g' datei.txt >ergebnis.txt führt bei mir zu einem leeren Textfile.


man perlrun

die option -i ersetzt die datei inline! dh natürlich wird kein output gegeben.
So wie du es willst musst du die Option -i weglassen,
siehe

man perlrun

MC3330
03-12-2010, 12:12
ok danke, ich habe jetzt verstanden wie es geht. Leider klappt es trotzdem einzelne Sachen zu ersetzten, da kann man wohl nchts machen.