28Jun
Wanneer u uw eigen servers beheert, is een van de dingen die u uiteindelijk op semi-regelmatige basis moet doen, extract-spullen uit het midden van een bestand. Misschien is het een logbestand of moet je een enkele tabel uit het midden van je MySQL-back-upbestand extra plaatsen, zoals ik deed.
Om de regelnummers te achterhalen, heeft een eenvoudige grep -n-opdracht de taak uitgevoerd( het -n-argument voert de regelnummers uit).Dit maakte het gemakkelijk om erachter te komen wat ik moest extraheren.
grep -n wp_posts howtogeekdb010114.bak |meerresulteert in iets als dit, dat de regelnummers aan de linkerkant van de uitvoer toont. Door alles in "meer" te pipen, zorgt u ervoor dat u de eerste regel kunt zien zonder dat deze voorbij scrolt. Nu heb je het regelnummer om mee te beginnen, en waarschijnlijk het nummer om mee te eindigen.
4160: - Tabelstructuur voor tabel `wp_posts` 4163: DROP TABLE INDIEN BESTAAT` wp_posts`;4166: MAAK TAFEL `wp_posts`( 4203: - Dumpinggegevens voor tabel` wp_posts` 4206: LOCK TABLES `wp_posts` WRITE; 4207: / *! 40000 ALTER TABLE` wp_posts` DISABLE KEYS * /; 4208: INSERT IN `wp_posts`VALUES( 1,2, '2006-09-11 05:07:23', '2006-09-11Je kunt natuurlijk gewoon de uitvoer van grep naar een ander bestand pipen, zoals dit:
grep keyword bestandsnaam.txt & gt; outputbestandIn mijn geval wilde dat niet werken, omdat ik de resulterende back-up om de een of andere reden niet kon importeren. Dus ik vond een andere manier om de regels te extraheren met sed, en deze methode werkte.
sed -n '4160,4209p' howtogeekdb0101140201.bak & gt; outputbestandIn principe is de syntaxis als volgt, en zorg ervoor dat het -n argument wordt gebruikt, en voeg de "p" na het tweede regelnummer toe.
sed -n 'FIRSTLINENUMBER, LASTLINENUMBERp 'bestandsnaam & gt; outputfilenameEen aantal andere manieren waarop u specifieke regels in het midden van een bestand kunt weergeven? U kunt het hoofd gebruiken"Commando met het + nummer argument om de eerste x regels van een bestand te lezen, en gebruik dan tail om die regels uit te pakken. Niet de beste optie, veel overhead. Eenvoudigere optie? U kunt de opdracht split gebruiken om het bestand in meerdere bestanden rechts op het gewenste regelnummer in te stellen en vervolgens de lijnen met kop of staart uit te pakken.
Of je kunt gewoon sed gebruiken.