Entfernen von Zeilen aus der Mitte einer Datei mithilfe des Linux-Terminals
Wenn Sie Ihre eigenen Server verwalten, müssen Sie unter anderem halbwegs regelmäßig Dateien aus der Mitte einer Datei extrahieren. Möglicherweise handelt es sich um eine Protokolldatei oder Sie müssen eine einzelne Tabelle aus der Mitte Ihrer MySQL-Sicherungsdatei hinzufügen, wie ich es tat.
Um die Zeilennummern herauszufinden, hat ein einfacher grep -n-Befehl den Job ausgeführt (das Argument -n gibt die Zeilennummern aus). Das machte es mir leicht, herauszufinden, was ich extrahieren musste.
grep -n wp_posts howtogeekdb010114.bak | Mehr
Das Ergebnis ist etwa so, dass auf der linken Seite der Ausgabe die Zeilennummern angezeigt werden. Wenn Sie alles in „mehr“ umleiten, wird sichergestellt, dass Sie die erste Zeile sehen können, ohne dass diese durchläuft. Jetzt haben Sie die Zeilennummer, mit der Sie beginnen können, und wahrscheinlich die, mit der Sie enden möchten.
4160: - Tabellenstruktur für die Tabelle 'wp_posts' 4163: DROP TABLE IF EXISTS 'wp_posts'; 4166: CREATE TABLE 'wp_posts' (4203: - Dumping-Daten für die Tabelle 'wp_posts') 4206: LOCK TABLES 'wp_posts' WRITE; 4207: / *! 40000 ALTER TABLE 'wp_posts' DISABLE KEYS * /; WERTE (1,2, 2006-09-11 05:07:23), 2006-09-11
Sie können die Ausgabe von grep natürlich auch in eine andere Datei leiten:
grep-Schlüsselwort dateiname.txt> Ausgabedatei
In meinem Fall wollte das nicht funktionieren, weil ich das resultierende Backup aus irgendeinem Grund nicht importieren konnte. Also habe ich einen anderen Weg gefunden, die Linien mit sed zu extrahieren, und diese Methode hat funktioniert.
sed -n '4160,4209p' howtogeekdb0101140201.bak> Ausgabedatei
Die Syntax sieht im Wesentlichen so aus, wobei darauf zu achten ist, dass das Argument -n verwendet wird und nach der zweiten Zeilennummer das "p" eingefügt wird.
sed -n 'FIRSTLINENUMBER, LASTLINENUMBERp' Dateiname> Ausgabedateiname
Einige andere Möglichkeiten, wie Sie bestimmte Zeilen in der Mitte einer Datei ziehen können? Sie können den Befehl "head" mit dem Argument + number verwenden, um nur die ersten x Zeilen einer Datei zu lesen und dann tail zum Extrahieren dieser Zeilen zu verwenden. Nicht die beste Option, viel Aufwand. Einfachere Option? Sie können den Befehl split verwenden, um die Datei direkt an der gewünschten Zeilennummer in mehrere Dateien umzuwandeln und dann die Zeilen mit head oder tail zu extrahieren.
Oder du kannst einfach sed benutzen.