sed - lösche alles bis zum vorletzten vorkommen von...

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 - lösche alles bis zum vorletzten vorkommen von...

Beitrag von monotek » 10.11.2009 16:51:58

Ich habe eine Datei in der mehrfach die folgende Zeile vorkommt:
---------------------------------------------------------------------
Wie kann ich mit sed alles bis zum vorletzten vorkommen der Zeile löschen?

Ich kann zwar ab dem ersten vorkommen löschen, indem ich folgedes verwende:

Code: Alles auswählen

 sed '/^-\{69\}$/,$d
Wie lösche ich aber bis zum vorletzten vorkommen?

Benutzeravatar
Meillo
Moderator
Beiträge: 9254
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: sed - lösche alles bis zum vorletzten vorkommen von...

Beitrag von Meillo » 10.11.2009 17:17:09

sed kann nicht vorraus schauen, deshalb ist es so nicht möglich. Wenn dann musst du die Datei umdrehen (tac oder trail -r), dann mit sed drauf arbeiten (wird wohl Branches benötigen), und das Ergebnis danach wieder umdrehen.

Ich schlage ed vor:

Code: Alles auswählen

$ cp yourfile yourfile2
$ ed -s yourfile2 <<EOF
> ?^-\{69\}$
> ??
> 1,.d
> w
> q
> EOF
$
Use ed once in a while!

Antworten