Sådan fjerner du linjer fra midten af en fil ved hjælp af Linux-terminalen
Når du styrer dine egne servere, er en af de ting, du ender med at gøre på semi-regular basis, ekstrakt fra midten af en fil. Måske er det en logfil, eller du skal ekstra et enkelt bord fra midten af din MySQL-backupfil, som jeg gjorde.
For at finde ud af linjenumrene, gjorde en enkel grep -n-kommando jobbet (et -n-argumentet udsender linjenumrene). Dette gjorde det nemt at finde ud af, hvad jeg havde brug for at udtrække.
grep -n wp_posts howtogeekdb010114.bak | mere
Resultater i noget som dette, som viser linjenumre over på venstre side af output. Piping alt til "mere" sørger for at du kan se første linje uden at rulle ved. Nu har du linjenummeret til at begynde med, og sandsynligvis den en, der slutter med.
4160: - Bordstruktur for tabel 'wp_posts' 4163: DROP TABEL IF EXISTS 'wp_posts'; 4166: CREATE TABLE 'wp_posts' (4203: - Dumpingdata for tabel 'wp_posts' 4206: LOCK TABLES 'wp_posts' WRITE; 4207: / *! 40000 ALTER TABEL 'wp_posts' DISABLE KEYS * /; 4208: indsæt i 'wp_posts 'VÆRDIER (1,2,' 2006-09-11 05:07:23 ',' 2006-09-11
Du kan selvfølgelig bare rør outputen fra grep til en anden fil, som denne:
grep søgeord filnavn.txt> outputfile
I mit tilfælde ville det ikke fungere, fordi jeg ikke kunne importere den resulterende backup af en eller anden grund. Så jeg fandt en anden måde at udtrække linjerne ved hjælp af sed, og denne metode fungerede.
sed-n '4160,4209p' howtogeekdb0101140201.bak> outputfile
I grund og grund er syntaksen sådan her, og sørg for at bruge -n-argumentet og inkludere "p" efter andet linjenummer.
sed -n 'FIRSTLINENUMBER, LASTLINENUMBERp' filnavn> outputfilename
Nogle andre måder kan du trække specifikke linjer midt i en fil? Du kunne bruge kommandoen "hoved" med + talargumentet til blot at læse de første x linjer i en fil og derefter bruge halen til at udvinde disse linjer. Ikke den bedste mulighed, masser af overhead. Enklere mulighed? Du kan bruge split-kommandoen til at dreje filen til flere filer lige ved det ønskede linjenummer, og derefter udtrække linjerne med hoved eller hale.
Eller du kan bare bruge sed.