Startpagina » hoe » Lijnen uit het midden van een bestand verwijderen met behulp van de Linux Terminal

    Lijnen uit het midden van een bestand 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, deed een eenvoudige grep -n-opdracht het werk (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

    Resultaten in iets als dit, dat de regelnummers aan de linkerkant van de uitvoer laat zien. 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' SCHRIJF; 4207: / *! 40000 ALTER TABLE 'wp_posts' BLOKKEERSLEUTELS * /; 4208: INVOEGEN 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> outputbestand

    In mijn geval wilde dat niet werken, omdat ik de resulterende back-up om wat voor reden dan ook niet kon importeren. Dus ik vond een andere manier om de regels met behulp van sed te extraheren, en deze methode werkte.

    sed -n '4160,4209p' howtogeekdb0101140201.bak> uitvoerbestand

    In principe is de syntaxis zo, en zorg ervoor dat het -n argument wordt gebruikt, en voeg de "p" toe na het tweede regelnummer.

    sed -n 'FIRSTLINENUMBER, LASTLINENUMBERp' bestandsnaam> uitvoerbestandsnaam

    Op een andere manier kun je specifieke regels in het midden van een bestand terugtrekken? U kunt de opdracht "head" gebruiken met het argument + number om de eerste x-regels van een bestand te lezen en vervolgens tail gebruiken om die regels te extraheren. Niet de beste optie, veel overhead. Eenvoudigere optie? U kunt de opdracht split gebruiken om het bestand in meerdere bestanden in te stellen, precies op het regelnummer dat u zoekt, en vervolgens de lijnen met kop of staart uit te pakken.

    Of je kunt gewoon sed gebruiken.