Hjemmeside » hvordan » Slik fjerner du linjer fra midten av en fil ved hjelp av Linux-terminalen

    Slik fjerner du linjer fra midten av en fil ved hjelp av Linux-terminalen

    Når du administrerer dine egne servere, er en av tingene du ender opp med å gjøre på semi-regular basis, ekstrakter fra midten av en fil. Kanskje det er en loggfil, eller du må ekstra et enkelt bord fra midten av MySQL-backupfilen, som jeg gjorde.

    For å finne ut linjenumrene, gjorde en enkel grep -n-kommando jobben (-et-argumentet utløser linjenumrene). Dette gjorde det enkelt å finne ut hva jeg trengte å trekke ut.

    grep -n wp_posts howtogeekdb010114.bak | mer

    Resultater i noe som dette, som viser linjenumrene over på venstre side av utgangen. Piping alt til "mer" sørger for at du kan se den første linjen uten å bla gjennom. Nå har du linjenummeret til å begynne med, og sannsynligvis den en til slutt med.

    4160: - Tabellstruktur for tabell 'wp_posts' 4163: DROP TABLE IF EXISTS 'wp_posts'; 4166: CREATE TABLE 'wp_posts' (4203: - Dumpingdata for tabell 'wp_posts' 4206: LOCK TABLES 'wp_posts' WRITE; 4207: / *! 40000 ALTER TABELL 'wp_posts' DISABLE KEYS * /; 4208: INSERT TIL 'wp_posts 'VÆRDIER (1,2,' 2006-09-11 05:07:23 ',' 2006-09-11

    Du kan selvfølgelig bare pippe utgangen fra grep til en annen fil, slik:

    grep søkeord filnavn.txt> outputfile

    I mitt tilfelle ville det ikke fungere, fordi jeg ikke kunne importere den resulterende sikkerhetskopien av en eller annen grunn. Så, jeg fant en annen måte å trekke ut linjene ved hjelp av sed, og denne metoden fungerte.

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

    I utgangspunktet er syntaksen som denne, sørg for å bruke -t argumentet, og inkludere "p" etter det andre linjenummeret.

    sed -n 'FIRSTLINENUMBER, LASTLINENUMBERp' filnavn> outputfilename

    Noen andre måter kan du trekke ut bestemte linjer midt i en fil? Du kan bruke kommandoen "head" med + tallargumentet for å bare lese gjennom de første x linjene i en fil, og deretter bruke halen til å trekke ut disse linjene. Ikke det beste alternativet, mye overhead. Enklere alternativ? Du kan bruke split-kommandoen til å slå filen til flere filer rett ved linjenummeret du vil ha, og deretter trekke linjene ut med hodet eller halen.

    Eller du kan bare bruke sed.