28Jun

Hoe lijnen uit het midden van een bestand te verwijderen met behulp van de Linux Terminal

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 |meer

resulteert 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-11

Je kunt natuurlijk gewoon de uitvoer van grep naar een ander bestand pipen, zoals dit:

grep keyword bestandsnaam.txt & gt; outputbestand

In 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; outputbestand

In 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; outputfilename

Een 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.