• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

leerzeilen löschen

hi,

habe einen text in folgender from :


Berlin


Frankfurterstr. 114




Berlin

Beethovenstr. 12



nach dem löschen der leerzeilen erhalte ich leider nicht die gewünschte form
Code:
sed '/^$/d'
ausgabe nach der sed anweisung:

Berlin
Frankfurterstr. 114


Berlin
Beethovenstr. 12


verstehe nicht warum trotz des Anweisung leerzeilen bestehen bleiben !


um eine Hilfestellung wäre ich euch dankbar

gruß flyingt
 
Schau mal mit

sed '/^$/d' <Datei> | od -xc

ob die "Leerzeilen" wirklich leer sind.

Vielleicht stehen noch Carriage Return oder Blank-Zeichen in der Datei

Gruß
schusch
 
Hi,
unter UNIX ist das keine Leerzeile.

Um missliebige Carriage Returnzeichen zu eleminieren habe ich mir ein mini C-Programm geschrieben:

Code:
/* nocr.c */
#include <stdio.h>                
                                  
main()                            
{                                 
    int i;                        
                                  
    while ((i=getchar()) != EOF) {
        if (i != 13) putchar(i);  
    }                             
}
 
Wie schon vom schusch angedeutet:
Das Satzendekennzeichen ist in der Windows/DOS-Welt ein anderes als in der UNIX/LINUX/MAC-Welt.

Unter Windows ist es \r\n
Unter LINUX ist es nur \n
Als Alternative zum C-Program:
Code:
man dos2unix
 
Hi,

habe folgenden befehl angewand um vom DOS aufs UNIX-format zuwechseln.
Code:
sed 's/.$//'

Es funktioniert, danke nochmal , hatte vorher keine kenntnis über die verschiedenen Formate

gruß flyingt
 
Wenn du jetzt auch noch dos2unix haben willst:
Code:
iconv -f cp437 -t utf-8 <file | perl -pe 's/\r\n/\n/sgo'
win2unix mit -f iso8859-1
und das reverse mit s/\n/\r\n/sgo
 
flyingt schrieb:
habe folgenden befehl angewand um vom DOS aufs UNIX-format zu wechseln.
Code:
sed 's/.$//'
In diesem Fall funktioniert das vielleicht, aber es löscht ggf. erheblich mehr, als du willst (nämlich das jeweils letze Zeichen aller Zeilen, also nicht auf Dateien im UNIX-Format loslassen!) Im Umgang mit REs bewährt es sich, diese wirklich genau auf ihren Zweck hin zuzuschneidern. Und wenn du das denn unbedingt mit sed machen willst, dann besser so:
Code:
sed -e 's/\r$//; /^$/d' input.txt > output.txt
Im ersten Durchgang werden alle Zeilenend-CRs ("\r$") entfernt, im zweiten alle leeren Zeilen gelöscht.

Ich würde zu info sed oder z.B. http://www.tty1.net/sed-tutorium/html raten. Die mMn "knackigste" Übersicht über REs findet sich übrigens unter man grep.
 
Oben