Hemsida » hur » Så här tar du bort linjer från mitten av en fil med Linux-terminalen

    Så här tar du bort linjer från mitten av en fil med Linux-terminalen

    När du hanterar dina egna servrar är en av de saker du slutar behöva göra på semi-regular basis extrakt från en fils mitten. Kanske är det en loggfil, eller du behöver extra ett enda bord från mitten av din MySQL-backupfil, som jag gjorde.

    För att räkna ut radnumren, gjorde ett enkelt grep -n-kommando jobbet (ett -n-argumentet matar ut linjenummer). Det gjorde det lätt att ta reda på vad jag behövde extrahera.

    grep -n wp_posts howtogeekdb010114.bak | Mer

    Resultatet i något som detta, vilket visar linjenummer över på vänster sida av utgången. Röra allt till "mer" och se till att du kan se första raden utan att rulla av. Nu har du linjenummer för att börja med, och förmodligen den som ska sluta med.

    4160: - Tabellstruktur för tabell 'wp_posts' 4163: DROP TABLE IF EXISTS 'wp_posts'; 4166: CREATE TABLE 'wp_posts' (4203: - Dumpningsdata för tabell 'wp_posts' 4206: LOCK TABLES 'wp_posts' WRITE; 4207: / *! 40000 ALTER TABELL 'wp_posts' DISABLE KEYS * /; 4208: INSERT INTO 'wp_posts "VÄRDEN (1,2, '2006-09-11 05:07:23', '2006-09-11

    Du kan naturligtvis bara leda utmatningen från grep till en annan fil, så här:

    grep sökord filename.txt> outputfile

    I mitt fall ville det inte fungera, för jag kunde inte importera den resulterande säkerhetskopian av någon anledning. Så, jag hittade ett annat sätt att extrahera raderna med sed, och den här metoden fungerade.

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

    I grunden är syntaxen så här, se till att använda -n-argumentet och inkludera "p" efter det andra radenummeret.

    sed -n 'FIRSTLINENUMBER, LASTLINENUMBERp' filnamn> outputfilename

    Några andra sätt kan du dra ut specifika linjer mitt i en fil? Du kan använda kommandot "huvud" med + talargumentet för att bara läsa igenom de första x raderna i en fil och använd sedan svansen för att extrahera de här raderna. Inte det bästa alternativet, mycket överhead. Enklare alternativ? Du kan använda split-kommandot för att vrida filen i flera filer direkt vid det radenummer du vill ha, och extrahera sedan linjerna med huvud eller svans.

    Eller du kan bara använda sed.