• 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

flyingt

Member
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
 

schusch

Newbie
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
 
OP
flyingt

flyingt

Member
Hi,


\r \n

steht in besagter zeile, müßte doch ne leerzeile sein ???

gruß flyingt
 

schusch

Newbie
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);  
    }                             
}
 

regexer

Advanced Hacker
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
 
OP
flyingt

flyingt

Member
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
 

SoeDib

Member
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.
 

regexer

Advanced Hacker
jengelh schrieb:
Wenn du jetzt auch noch dos2unix haben willst:
Naja, die Eingangsfrage war doch: Warum funktioniert sed '/^$/d' nicht?
Und die Lösung ist: dos2unix oder ähnliches. Aber das wurde jetzt insgesamt 3x gesagt :wink:
 
Oben