28Jun
Når du administrerer dine egne servere, er en av tingene du trenger å 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 -n-argumentet utløser linjenumrene).Dette gjorde det enkelt å finne ut hva jeg trengte å trekke ut.
grep -n wp_posts howtogeekdb010114.bak |merResultater 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`VALUES( 1,2, '2006-09-11 05:07:23', '2006-09-11Du kan selvsagt bare pippe utgangen fra grep til en annen fil, slik:
grep søkeordfilenavn.txt> outputfileI 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> outputfileI utgangspunktet er syntaksen slik: Sørg for å bruke -n-argumentet og inkludere "p" etter det andre linjenummeret.
sed -n 'FIRSTLINENUMBER, LASTLINENUMBERp 'filnavn & gt; outputfilenameNoen andre måter du kan trekke ut bestemte linjer i midten av en fil? Du kan bruke "head"Kommandoen med + tallargumentet for å bare lese gjennom de første x linjene i en fil, og bruk deretter halen for å 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.