28Jun

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( -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 linjenumrene over på venstre side af output. Piping alt i "mere" sørger for at du kan se den 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 TABLE 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`VALUES( 1,2, '2006-09-11 05:07:23', '2006-09-11

Du kan selvfølgelig bare rør output fra grep til en anden fil, som denne:

grep søgeord filnavn.txt & gt; 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 udvinde 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, sørg for at bruge -n-argumentet og inkludere "p" efter det andet linjenummer.

sed -n 'FIRSTLINENUMBER, LASTLINENUMBERp 'filnavn & gt; outputfilename

Nogle andre måder kan du trække specifikke linjer midt i en fil? Du kan bruge "hovedet"Kommandoen med + tal argumentet for bare at læse de første x linjer af en fil, og brug derefter halen til at uddrage disse linjer. Ikke den bedste løsning, 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.