sed - die letzten Zeilen einer Datei löschen?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
monotek
Beiträge: 227
Registriert: 20.07.2004 15:25:11
Wohnort: dresden

sed - die letzten Zeilen einer Datei löschen?

Beitrag von monotek » 06.09.2005 11:42:16

Mittels

Code: Alles auswählen

sed '1,10d'
kann ich ja die ersten Zehn Zeilen einer Datei löschen.

Mit

Code: Alles auswählen

sed '1,$d'
kann ich von der ersten bis zur letzten Zeile löschen.

Aber wir löscht man von der letzten Zeile bis zur 20 (von unten gezählt), ohne dabei die tatsächliche Zeilenzahl zu kennen?
Zuletzt geändert von monotek am 13.09.2005 13:33:23, insgesamt 1-mal geändert.

Benutzeravatar
peschmae
Beiträge: 4844
Registriert: 07.01.2003 12:50:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: nirgendwo im irgendwo

Beitrag von peschmae » 06.09.2005 12:15:18

head -n -20

ich glaub nicht dass das mit sed wirklich gut ginge (geht alles mit Sed, aber einiges geht sehr schlecht)

MfG Peschmä
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Re: sed - die letzten 20 Zeilen einer Datei löschen?

Beitrag von Savar » 06.09.2005 12:18:38

monotek hat geschrieben:Mit

Code: Alles auswählen

sed '1,$d'
kann ich von der ersten bis zur letzten Zeile löschen.
sollte (ungetestet) auch mit

Code: Alles auswählen

sed '%d'
funktionieren
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

Benutzeravatar
monotek
Beiträge: 227
Registriert: 20.07.2004 15:25:11
Wohnort: dresden

Beitrag von monotek » 06.09.2005 13:21:40

peschmae hat geschrieben:head -n -20

ich glaub nicht dass das mit sed wirklich gut ginge (geht alles mit Sed, aber einiges geht sehr schlecht)

MfG Peschmä
*g*
Mal wieder den Wald vor lauter Bäumen nicht gesehn :-)

Danke!

Benutzeravatar
monotek
Beiträge: 227
Registriert: 20.07.2004 15:25:11
Wohnort: dresden

Beitrag von monotek » 13.09.2005 13:18:41

Muss das ganze doch nochmal mit Sed aufgreifen, da sich die Anzahl der letzten Zeilen leider ab und zu ändert :roll:

Die erste Zeile ist allerdings immer gleich.
Sie lautet immer:

"The HylaFAX Receive Agent <fax@bla.com> schrieb:"

Diese Zeile kann ich ja mit folgendem Befehl löschen.

Code: Alles auswählen

/bin/cat /tmp/mail | /bin/sed 's/The HylaFAX Receive Agent <fax@bla.com> schrieb://' > /tmp/fax
Nun will ich aber auch alle Zeichen in allen Zeilen, die nach dieser Zeile kommen, löschen.

Hab es schon wie folgt probiert, funktioniert aber leider nicht...

Code: Alles auswählen

/bin/cat /tmp/mail | /bin/sed 's/The HylaFAX Receive Agent <fax@bla.com> schrieb:.*//' > /tmp/fax
Hat noch wer ne Idee dazu?

Benutzeravatar
peschmae
Beiträge: 4844
Registriert: 07.01.2003 12:50:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: nirgendwo im irgendwo

Beitrag von peschmae » 13.09.2005 13:38:43

sowas?

Code: Alles auswählen

sed '/The HylaFAX Receive Agent <fax@bla.com> schrieb:The HylaFAX Receive Agent <fax@bla.com> schrieb:/,3000d'
Wobei das voraussetzt dass die Datei kürzer als 3000 Zeilen ist ;)

MfG Peschmä
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 13.09.2005 13:43:06

da müsste doch dann auch $ greifen oder?

Code: Alles auswählen

sed '/The HylaFAX Receive Agent <fax@bla.com> schrieb:The HylaFAX Receive Agent <fax@bla.com> schrieb:/,$d' 
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 13.09.2005 14:04:12

Nimm besser:

Code: Alles auswählen

sed '/^The HylaFAX Receive Agent <fax@bla.com> schrieb:/,$d' 
:wink:

Benutzeravatar
monotek
Beiträge: 227
Registriert: 20.07.2004 15:25:11
Wohnort: dresden

Beitrag von monotek » 13.09.2005 15:03:13

peschmae hat geschrieben:

Code: Alles auswählen

sed '/The HylaFAX Receive Agent <fax@bla.com> schrieb:The HylaFAX Receive Agent <fax@bla.com> schrieb:/,3000d'
Funktioniert leider nicht. Datei bleibt unverändert.
Kannst du mir die Funktion mal genau erklären bitte?
Warum kommt das "The HylaFAX Receive Agent <fax@bla.com> schrieb:" 2 mal hintereinander?

Die Zeile kommt nur einmal vor. Danach sollen alle beliebigen Zeichen ersetzt / gelöscht werden.

Joghurt hat geschrieben:Nimm besser:

Code: Alles auswählen

sed '/^The HylaFAX Receive Agent <fax@bla.com> schrieb:/,$d' 
:wink:
Die Zeile kommt nicht am Anfang, sondern in der Mitte des Dokuments.
Ab dieser soll nur gelöscht werden.
Dann ist das ^ am Anfang doch sich nicht richtig oder?



edit:
Von mir aus könnte man auch die Zeilen ab "The HylaFAX Receive Agent <fax@bla.com> schrieb:" zählen und diese dann mit head löschen. Wie zählt man Zeilen? Mit wc?

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 13.09.2005 15:05:18

Redest du von Zeilen oder von Dokuemnt?

^ ist für den Zeilenanfang (nicht Dokumentanfang)
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

Benutzeravatar
monotek
Beiträge: 227
Registriert: 20.07.2004 15:25:11
Wohnort: dresden

Beitrag von monotek » 13.09.2005 15:24:39

Savar hat geschrieben:^ ist für den Zeilenanfang (nicht Dokumentanfang)
OK. Dann passt das doch.

Bleibt immer noch das Problem, das hinter besagter Zeile alles (beliebige Zeichen ind bleibiger Anzahl von Zeilen) gelöscht werden soll.

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 13.09.2005 15:30:46

es müsste doch

Code: Alles auswählen

sed '/^The HylaFAX Receive Agent <fax@bla.com> schrieb:/,$d'
passen, oder?
Schon probiert?
Was macht/sagt er denn?
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

Benutzeravatar
monotek
Beiträge: 227
Registriert: 20.07.2004 15:25:11
Wohnort: dresden

Beitrag von monotek » 13.09.2005 15:45:23

Sorry. Funktioniert doch :oops:

Hatte nen Tippfehler drin :roll:


Vielen Dank! :-)

Benutzeravatar
peschmae
Beiträge: 4844
Registriert: 07.01.2003 12:50:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: nirgendwo im irgendwo

Beitrag von peschmae » 13.09.2005 20:28:17

monotek hat geschrieben: Warum kommt das "The HylaFAX Receive Agent <fax@bla.com> schrieb:" 2 mal hintereinander?
*ggg sorry. Nach nem resume tut meine Mittlere Maustaste irgendwie immer doppelt ausser ich klicke langsam. Das gibt dann lustige Ergebnisse ;-)

MfG Peschmä
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy

Benutzeravatar
monotek
Beiträge: 227
Registriert: 20.07.2004 15:25:11
Wohnort: dresden

Beitrag von monotek » 13.09.2005 20:37:37

Macht nix :-)

Antworten