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 | more
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:-- Table structure for table `wp_posts` 4163:DROP TABLE IF EXISTS `wp_posts`; 4166:CREATE TABLE `wp_posts` ( 4203:-- Dumping data for table `wp_posts` 4206:LOCK TABLES `wp_posts` WRITE; 4207:/*!40000 ALTER TABLE `wp_posts` DISABLE KEYS */; 4208:INSERT INTO `wp_posts` VALUES (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 keyword filename.txt > outputfile
I mitt tilfelle ville det ikke fungere, fordi jeg ikke kunne importere den resulterende backupen 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, pass på at du bruker et-argument, og inkludere "p" etter det andre linjenummeret.
sed -n 'FIRSTLINENUMBER, LASTLINENUMBERp' filename > 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.