[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Zeilen zwischen 2 Wörtern löschen



Hallo Klaus,

On 01.01.22 20:35, Klaus Becker wrote:
> Ich will's mal versuchen. Ich habe einen Text
> 
> 
> Abschnitt 1
> Wort1 blabla Wort2
> Abschnitt 2
> Wort1 blabla Wort2
> Abschnitt 3
> Wort1 blabla Wort2
> 
> Die Abschnitte bestehen jeweils aus vielen Zeilen und enthalten jedesmal einen anderen Text. "Wort1 blabla Wort2" ist immer der gleiche Text.
> 
> Ich möchte die Zeilen mit "Wort1 blabla Wort2" ganz löschen, die anderen Abschnitte aber intakt lassen. Meine obige Lösung würde z. B. nur "Abschnitt 1" übriglassen.

Wenn die zu löschende Zeile durch einen regulären Ausdruck einfach zu beschreiben ist reicht ja das zeilenweise Matching von sed aus, z.B. sed -i '/Wort1.*Wort2/d'
liefert das (m.E.) gewünschte Ergebnis. Dabei ist .* eine beliebig lange Kette von Zeichen (ggf. auch kein Zeichen). Alternativ würde ich grep als Tool in den Raum
stellen, Du kannst mittels "grep -v -E 'Wort1.*Wort2'" datei alle Zeilen ausgeben, die nicht dem Pattern entsprechen. Im Gegensatz zu sed mit "-i" kannst Du aber
nicht direkt die Datei ändern, d.h. du muss die Ausgabe umleiten und mit einer temporären Datei mehr Arbeiten.

Sollte das Beispiel stark vereinfacht sein und "Wort1 blabla Wort2" erstreckt sich auch über mehrere Zeilen ist es nicht mehr so einfach, dann könntest Du aber ggf. mit
Perl zeilenübergreifend matchen und dir zu nutze machen, dass Perl auch non-greedy Matches (mittels ?) unterstützt, was sed m.E. nicht kann.

hth,
Thomas


Reply to: