Wenn Sie Ihre eigenen Server verwalten, müssen Sie unter anderem regelmäßig Dinge aus der Mitte einer Datei extrahieren. Vielleicht ist es eine Protokolldatei, oder Sie müssen eine einzelne Tabelle aus der Mitte Ihrer MySQL-Sicherungsdatei extrahieren, wie ich es getan habe.
Um die Zeilennummern herauszufinden, hat ein einfacher grep -n Befehl die Aufgabe erledigt (das Argument -n gibt die Zeilennummern aus). Dies machte es einfach herauszufinden, was ich extrahieren musste.
grep -n wp_posts howtogeekdb010114.bak | more
Das Ergebnis ist etwa so, das die Zeilennummern auf der linken Seite der Ausgabe anzeigt. Wenn Sie alles in «more» einbetten, können Sie die erste Zeile sehen, ohne dass sie vorbeiscrollt. Jetzt haben Sie die Zeilennummer, mit der Sie beginnen können, und wahrscheinlich die, mit der Sie enden müssen.
4160:-- Table structure for table `wp_posts`
4163:DROP TABLE IF EXISTS `wp_posts`;
4166:CREATE TABLE `wp_posts` (
4203:-- Dumping data for table `wp_posts`
4206:LOCK TABLES `wp_posts` WRITE;
4207:/*!40000 ALTER TABLE `wp_posts` DISABLE KEYS */;
4208:INSERT INTO `wp_posts` VALUES (1,2,'2006-09-11 05:07:23','2006-09-11
Sie könnten natürlich die Ausgabe von grep einfach in eine andere Datei umleiten, wie folgt:
grep keyword filename.txt > outputfile
In meinem Fall wollte das nicht funktionieren, da ich das resultierende Backup aus irgendeinem Grund nicht importieren konnte. Also habe ich einen anderen Weg gefunden, um die Zeilen mit sed zu extrahieren, und diese Methode hat funktioniert.
sed -n '4160,4209p' howtogeekdb0101140201.bak > outputfile
Grundsätzlich ist die Syntax so, stellen Sie sicher, dass Sie das Argument -n verwenden und das «p» nach der zweiten Zeilennummer einfügen.
sed -n 'FIRSTLINENUMBER, LASTLINENUMBERp' filename > outputfilename
Gibt es andere Möglichkeiten, bestimmte Zeilen in der Mitte einer Datei herauszuziehen? Sie können den Befehl „head“ mit dem Argument +number verwenden, um nur die ersten x Zeilen einer Datei zu lesen und dann mit tail diese Zeilen zu extrahieren. Nicht die beste Option, viel Overhead. Einfachere Variante? 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 Kopf oder Schwanz extrahieren.
Oder Sie können einfach sed verwenden.