2017-10-03 2 views
0

Ich muss Teil des Textes aus einer sehr großen Textdatei entfernen. Die Textdatei ist so etwas wie die:Entfernen Sie Teil des Textes aus einer TXT-Datei

Abcdefghijk 
LOCK TABLES `core_log` WRITE; <---- 
(DATA - over 1 Gb of text data) 
UNLOCK TABLES; <---- 
lmnopqrstuvxyz 

Ich brauche ein Skript (Windows oder Unix) zu erstellen, die alle Inhalte von „LOCK TABLES“ zu entfernen „UNLOCK TABLES;“ und bewahren Sie den Rest der Datei. Nachdem das Skript ausgeführt werden muß ich

Abcdefghijk 
lmnopqrstuvxyz 

ich die extrahierten Daten in einer anderen Datei speichern lassen oder kann ich die gleiche Datei überschrieben werden soll. Danke für Hilfe.

+0

Sie meinen, wie 'LOCK TABLES * UNLOCK. TABLES; \ s * 'mit dem' s' Modifikator? – ctwheels

+0

Willkommen bei SO. Diese Website ist kein Code-Schreibdienst und nicht für die Bereitstellung von Komplettlösungen gedacht. Von den Benutzern wird erwartet, dass sie etwas Mühe und Code zeigen, während SO hier ist, um Ihnen zu helfen, spezifische Programmierprobleme auf dem Weg zu lösen. Hast du schon etwas probiert? Bitte lesen Sie: https://stackoverflow.com/help/asking –

Antwort

2

Mit GNU sed:

sed -i '/^LOCK TABLES/,/^UNLOCK TABLES/d' file 

Ausgabe in Datei:

 
Abcdefghijk 
lmnopqrstuvxyz 
+0

Warum nur GNU? Wenn ich mich nicht irre, ist Ihr Ausdruck POSIX-kompatibel. – randomir

+0

@randomir: Option '-i' wird nicht von jedem sed auf die gleiche Weise behandelt. – Cyrus

+1

Ok, ich bin mir nicht sicher "-i", aber Regex-Adressbereich Auswahl sollte überall funktionieren. – randomir

2

Dies geschieht am besten mit awk getan:

$ awk '/^LOCK TABLE/{f=1} /^UNLOCK TABLE/{f=0} f' file 
Verwandte Themen