sed entfernt nur 1 von 2 Leerzeilen

FatManStanding

Lt. Junior Grade
Registriert
Aug. 2021
Beiträge
509
tach,

ich möchte aus textdateien die zu brginn 2 leerzeilen enthalten diese entfernen. ich bekomme aber immer nur eine davon weg mit

Code:
cat $file" | sed '/^$/d'

im editor geany gibt es die option "zeilenenden anzeigen", da wird für beide leerzeilen ein zeichen "LF" angezeigt. im grunde sollten also beide gleich sein. wieso wir nur eine davon entfernt?
 
Schau mal in die Manpage von sed, da gibt es noch die Option g für global, dann sollten alle Fundstelle weg sein, ich glaube, es reicht ein /g hinten evt. /s vorne als s/^$/d/g
Bin mir nicht sicher
 
funktioniert eigentlich wie gewünscht:

Code:
$ cat -e foo.txt
$
$
foo$
bar$
$ cat foo.txt | sed '/^$/d'
foo
bar
 
geht alles nicht. auch ein "awk 'NF' file" führt zum gleichen ergebnis. kann es sein, dass die beiden leerzeichen vielleicht doch nicht gleich sind? eine "andere art leerzeichen"? wenn ich noch mehr leerzeichen am beginn anfüge bleibt immer eine leerzeile übrig.
 
du könntest natürlich einfach eine beispieldatei hochladen... :) muss ja nichts geheimes enthalten.
 
Oder einfach selbst die Datei untersuchen:
$ hexdump -C ${file}
$ xxd ${file}
 
also bei hexdump und xxd gukc ich wie die sau ins uhrwerk. ich versteh die ausgabe leider nicht.

hier die bsp.-datei.
Ergänzung ()

die datei die hier bearbeitet werden soll stammt aus einem firefox-addon (save to text). damit kann man markierten text in eine textdatei kopieren. die sicherheitsfeatures von firefox lassen aber nur die speicherung in den download-ordner zu und keine weitere bearbeitung weshalb ich das ganze dann über eins script mache.

wenn ich nun einfach händisch eine datei mit 2 leerzeilen und text in zeile 3 erstelle geht das mit sed. die textdatei die das firefox-addon erstellt geht nicht.
Ergänzung ()

ich liefer hier nochmal die ausgaben von hexdump der beiden dateien nach:

Code:
hexdump manuell
0000000 0a0a 6220 6965 7073 6569 646c 7461 6965
0000010 000a                                   
0000011

Code:
hexdump add-on
0000000 bbef 0abf 200a 6562 7369 6970 6c65 6164
0000010 6574 0a69                             
0000014

man sieht, dass die leerzeile direkt über dem text in der "add-on-datei" "mehr" enthält als die manuell erstellt - was auch immer dieses "mehr" darstellt.
 

Anhänge

Zuletzt bearbeitet:
dann entferne einfach die ersten beiden zeilen, egal was drin steht -> tail -n +3 bsp.txt bzw. sed '1,2d' < bsp.txt
 
Das ist aber nicht die korrekte, vollständige Ausgabe. Der rechte Teil mit den Zeichen fehlt.

Wie auch immer... Aus dem Stegreif heraus vermute ich mal, das ist UTF Unicode kodiert. Das geht glaube ich dynamisch bis mittlerweile 32Bit, also bis zu 4 Bytes (typisch 2) pro Zeichen. Ich könnte mir vorstellen, dass 'sed' das gesondert unterstützt.

Theoretisch könnten das auch 'magic bytes' am Anfang sein, also eine Art Header/Kopf für ein bestimmtes Dateiformat. Aber wenn es explizit als 'Text' deklariert wurde, tendiere ich eher zu oberer Theorie.
 
Zuletzt bearbeitet:
ef bb bf ist der byte order mark von utf8. danach kommt zwei mal 0x0a bzw. LF und dann der text. daher entfernt das sed-kommando vom te nur eine zeile.
 
ich bin jetzt den komplett anderen weg gegangen und hab mit "grep [A-Za-z0-9]" einfach alle zeilen mit entsprechenden inhalt anzeigen lassen. das geht auch.
 

Ähnliche Themen

Zurück
Oben