Dateien ab einer bestimmten Zeile löschen

M

mrblubber

Grünschnabel
Hallo,

ich habe ein Skript geschrieben, welches mir mehrere Dateien in eine einzige Datei zusammenführt. Die einzelnen Dateien enthalten aber mehr Information als ich eigentlich brauche und ich würde den überflüssigen Inhalt gerne wegschneiden. Die Dateien sind folgendermaßen aufgebaut:

$Anfang
wichtiger Inhalt
$blablabla
hier fängt der Dreck an
$end

Der wichtige Inhalt ist immer unterschiedlich lang und daher müsste ich die Dateien immer ab der Zeile $blablabla löschen. Ich habe bisher nur Lösungen gefunden um einzelne Zeilen mit bestimmtem Inhalt zu löschen oder alles ab einer bestimmten Zeile. Ich brauche eine Kombination aus diesen beiden Wegen (löschen ab einem bestimmten Inhalt). Hat jemand einen Lösungsvorschlag?

Danke
 
Zuletzt bearbeitet:
Hey,
Du kannst mit grep dir den Inhalt aufgeben, zählen ab welcher Zeile dieser Inhalt beginnt und dann ab Zeile X Löschen :-)

Den genauen Befehl habe ich nicht im kopf... Bin am Handy. Ist aber nicht schwierig :-)

Gruß


Gesendet von meinem HTC One mit Tapatalk
 
Hey,
Hätte hier eine Lösung.

Zeilennummer des gesuchten strings:
egrep -n "string" file | cut -d":" -f1

Löschen ab der Zeile X:
sed 'GEFUNDENEZEILE,$d' file

Gruß

Gesendet von meinem HTC One mit Tapatalk
 
Hallo Nexus633,

danke für deine Antwort. Gerade eben habe ich nach mehreren Stunden Suche eine Lösung gefunden. Mit
sed '/$blablabla/,/$end/d' input > output
wird alles von $blablabla bis $end gelöscht. Das ist sogar eleganter als dein Vorschlag :D

Trotzdem vielen Dank! :)
 
Hey,
Kein Problem, nur habe ich deinen thread anders interpretiert... Du schreibst du hast mehrere Dateien die du zusammenführst. In diesen Dateien sind habe überflüssige Inhalte drinne, die du wegschneiden willst. Diese Inhalte musst du dir also raussuchen. Da du geschrieben hast das du bisher nur eine Methode gefunden hast wo du einzelne Zeilen löschen kannst, stelle ich mir doch den Gedanken das du dir den Inhalt raussuchst. Da du Zeilen erwähnt hast und ich das so raudgelesen habe, habe ich dir diesen Vorschlag erbracht.

In deinem Beispiel musst du ja genau wissen wo was ist um es zu löschen. Demnach kannst du das doch beim zusammenführen direkt weglassen. So sparst du dir einen arbeitsweg.

Naja ist auch Jacke wie Hose :-)
Solange dir geholfen ist, ist doch alles paletti :-)

Gruß

Gesendet von meinem HTC One mit Tapatalk
 
Hmm ich glaube wir reden aneinander vorbei. Ich will in diesen Dateien alles ab der Zeile $blablabla löschen. Der Inhalt von $blablabla ist in allen Dateien gleich. Diese Zeile befindet sich aber immer an einer anderen Stelle, weil der Inhalt vorher unterschiedlich lang ist. Deswegen macht dieser Weg auf jeden Fall Sinn. Außerdem ist das nur ein Schritt, deine Lösung waren 2 Schritte. Also nix mit Arbeitsweg sparen :P

Und ich meinte ich habe nur Wege gefunden um
a) eine einzelne Zeile mit einem bestimmten string zu löschen oder
b) um einen ganzen Bereich mit Hilfe von Zeilennummern zu löschen.
Ich brauchte aber eine Lösung um einen Bereich mit Hilfe eines bestimmten strings zu löschen, weil die Zeilennummer in jeder Datei anders ist. Aber jetzt habe ich die Lösung ja.

Viele Grüße
 
Hey,
Jo dann wie gesagt falsch interpretiert.
Auch wie gesagt: solange du das gefunden hast was du brauchst und dieser weg klappt läuft ist doch alles super :-)

Gruß

Gesendet von meinem HTC One mit Tapatalk
 
Wenn die Datein sehr gross sind, ist es schneller, nur die ersten Zeilen zu drucken, anstatt die letzten zu loeschen. Das muesste mittels
Code:
sed -n '1,/$blablabla/p' input > output
funktionieren.
 

Ähnliche Themen

3 letzte Zeile löschen oder ab Zeile 55 Muster suchen und löschen

Tabelle erst ab bestimmter Spalte anzeigen

CSV Datei mit sed manipulieren/optimieren/ergänzen

Mehrere Zeile aus 1 Datei in einer andere Datei löschen?

Programmierung unter Linux

Zurück
Oben