bubaco
Goto Top

löschen von zeilenumbruch

hi leutz,
will in einer .txt datei einen zeilenumbruch löschen. ich arbeite mit dem "Unix Werkzeuge - Der Stream Editor". unten zeige ich mal was ich bis jetzt gemacht habe.
1) loeschen der 1 zeile
2) loeschen in 3 zeile die ersten 21 zeichen
3) --> hier ist das problem --> loeschen des zeilenumbruches zwischen zeile 2 und 3

dat klappt aber nicht.

sed -e 1d;$d;3s/^.{21};2s; Einzelbeleg_03_08a.txt >tmp001.txt


kann mir bitte einer helfen und erklären wie das geht.

gruss
micha

Content-Key: 65459

Url: https://administrator.de/contentid/65459

Ausgedruckt am: 28.03.2024 um 23:03 Uhr

Mitglied: 49391
49391 06.08.2007 um 15:24:46 Uhr
Goto Top
Servus Micha,

das "Problem" beim 'sed' besteht darin, daß Eingabe, Verarbeitung und Ausgabe zeilenweise erfolgt. Wird eine Zeile geschrieben, hängt 'sed' ein NewLine an. Das läßt sich meines Wissens nicht verhindern und hat mich auch schon oft geärgert.
Ich löse das dann in Kombination mit 'awk', indem ich z.B. einen Buffer definiere in den ich hineinschreibe.
Leider ist mir nicht ganz klar, wie Du Deine Datei umformatiert haben möchtest bzw. wieviele Zeilen überhaupt drinstehen. Drum nur als Anhaltspunkt:

sed -e '<anweisungen>' quelle.txt | awk ' NR==1 || NR>3 {print} ; NR==2 { buf=$0 } ; NR==3 {print buf $0}' > ziel.txt  

Kurze Erklärung:
Die Ausgabe von sed schiebst Du zu awk.
awk gibt die Zeile Nr.1 und alle ab der 4. Zeile unverändert aus (NR ist der interne awk-"Zeilenzähler").
Zeile 2 wird gebuffert und erst mit Zeile 3 ausgegeben, damit werden beide Zeilen zusammengehängt.

Das Beispiel ist nicht wirklich schön und vermutlich nicht genau auf Dein Problem passend, sollte aber zum Verständnis beitragen können.

Gruß