Leerzeichen mit sed löschen

hallo,

ich habe dateien der form

1*MOT: very good .
2*MOT: now it 's daddy s go .
3*MOT: daddy ?
4*MOT: your turn .
5*MOT: he 's got to go round the corner .
6*MOT: look .
7*CHI: bin ich dran .
8*MOT: aha .
9*CHI: aha .
10*MOT: so what are these ones ?

nach dem doppelpunkt kommt jeweils ein tabulator und dann der satz

in den dateien hat sich an einigen stellen ein leerzeichen vor den
jeweiligen sätzen eingeschlichen, die für die weiterverarbeitung
tödlich sind
nun versuche ich diese leerzeichen nach dem tabulator mit sed zu
entfernen:

sed ‚s/\t /\t/g‘ datei_alt.txt>datei_neu.txt

was nicht funktioniert - und ich weiss nicht, wo ich gerade falsch
denke…

wäre schön, wenn jemand hilfe wüsste

jo

Hi,

ich habe dateien der form

Apropos Form: PRE tags sind toll.

> 1\*MOT: very good .  
> 2\*MOT: now it 's daddy s go .  
> 3\*MOT: daddy ?  
> 4\*MOT: your turn .  
> 5\*MOT: he 's got to go round the corner .  
> 6\*MOT: look .  
> 7\*CHI: bin ich dran .  
> 8\*MOT: aha .  
> 9\*CHI: aha .  
> 10\*MOT: so what are these ones ?

in den dateien hat sich an einigen stellen ein leerzeichen vor
den jeweiligen sätzen eingeschlichen, die für die
weiterverarbeitung tödlich sind nun versuche ich diese
leerzeichen nach dem tabulator mit sed zu entfernen:

> sed 's/\t /\t/g' datei\_alt.txt\>datei\_neu.txt

Hm… vielleicht… aber nein, das haettest Du uns bestimmt gesagt. Im Uebrigen ist die Option g ziemlich ueberfluessig.

was nicht funktioniert

Was passiert denn?

  • und ich weiss nicht, wo ich gerade falsch denke…

\t versteht nicht jedes sed. Du kannst da aber auch einen echten Tabulator nehmen. In der shell gibt man den gefolgt von einem C-V ein. Ich kriege hier mit beidem das gewuenschte Resultat:

[10021] (0) frank@harbard [~] % cat foo.txt
1\*MOT: very good .
2\*MOT: now it 's daddy s go .
3\*MOT: daddy ?
4\*MOT: your turn .
5\*MOT: he 's got to go round the corner .
6\*MOT: look .
7\*CHI: bin ich dran .
8\*MOT: aha .
9\*CHI: aha .
10\*MOT: so what are these ones ?
[10022] (0) frank@harbard [~] % sed 's/\t /\t/' foo.txt
1\*MOT: very good .
2\*MOT: now it 's daddy s go .
3\*MOT: daddy ?
4\*MOT: your turn .
5\*MOT: he 's got to go round the corner .
6\*MOT: look .
7\*CHI: bin ich dran .
8\*MOT: aha .
9\*CHI: aha .
10\*MOT: so what are these ones ?
[10023] (0) frank@harbard [~] % sed 's/ / /' foo.txt 
1\*MOT: very good .
2\*MOT: now it 's daddy s go .
3\*MOT: daddy ?
4\*MOT: your turn .
5\*MOT: he 's got to go round the corner .
6\*MOT: look .
7\*CHI: bin ich dran .
8\*MOT: aha .
9\*CHI: aha .
10\*MOT: so what are these ones ?
[10024] (0) frank@harbard [~] % sed --version
GNU sed version 4.1.5
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE,
to the extent permitted by law.
[10025] (0) frank@harbard [~] % 

HTH,
Gruss vom Frank.

Hi,
sorry, bin grade zu müde um auf dein Frage wirklich einzugehen.
Ich habe mir mal ein script geschrieben um Leerzeichen in Dateinamen (rekursiv) durch Unterstriche zu ersetzen. Die Kernzeilen poste ich mal, vielleicht hilft dir das:

for i in $(find -name "\*\ \*") ; do

 # Leerzeichen ersetzen
 # Replace spaces
 j=$(echo $i | sed -e s/\ /\_/g )

 # Kontrollausgabe
 # output for control
 echo $i" -\> "$j # gibt Dateinamen aus / print the filename

 # umbenennen
 # rename files
 if test -f $j; then
 echo $j schon vorhanden. Durch Zufallswert ergaenzt.
# echo $j already exsists. Will add a random number. #switch language
 mv "$i" "$j".$RANDOM
 else
 mv "$i" "$j"
 fi
done

Achja, sollte es den Namen schon geben gibts eine Zufallszahl hintendran

HTH,
J~