Ta kommandot - titta i filer, jämföra, ändra och ta bort (10)

urban_anjars bild

Okej, har ni hämtat er sedan förra gången? Bra, då hoppar vi tillbaks till vår labbmapp. Du kommer väl ihåg hur? Kolla tidigare avsnitt annars.

urban@yoda:~/labbmapp$ ls
01.html  01.txt  kapitel_1
urban@yoda:~/labbmapp$ 

Ta bort filer, rm

Vi ska leka vidare med filen kapitel_1, så vi kan ta bort de andra filerna. Tar bort filer gör man med kommandot rm (remove), men kom nu noga ihåg att här finns ingen papperskorg. Tar du bort fel fil är det kört. Som jag tjatat om förväntas du veta vad du gör. Mitt råd är att ta en liten tankepaus innan man trycker på enter.

urban@yoda:~/labbmapp$ rm 01.html
urban@yoda:~/labbmapp$ rm 01.txt

Du kunde ha tagit bort båda filerna med ett enda kommando, men det tar vi upp lite senare.

Se början och slutet på filer; head och tail

Rätt ofta är jag nöjd med att se en liten del av en fil. Det kan vara början, slutet eller kanske rader där ett visst ord står. Vi ska titta på några sådana knep.


urban@yoda:~/labbmapp$ head kapitel_1

 

 

 

urban@yoda:~/labbmapp$

Ja, början på filen innehåller faktiskt en massa tomrader. Vill du förvissa dig om att det verkligen finns något i filen kan du titta på några rader till:

urban@yoda:~/labbmapp$ head -n20 kapitel_1

Vi ska snygga till början lite längre framm, nu tittar vi på filens slut i stället, det gör vi med tail:

urban@yoda:~/labbmapp$ tail kapitel_1
borta på Ladugårdslandet.
Detta gjorde unge Falk, men gamla Struve, vilken samma dag inträtt i den
konservativa Gråkappan, sedan han fått avsked ur Rödluvan, gick hem och skrev
till den misstänkta Folkets Fana en korrespondens-artikel »Om Kollegiet för
utbetalandet av Ämbetsmännens löner», på 4 spalter à 5 rdr spalten.
===============================================================================
Project Runeberg, Mon Apr 17 05:13:23 2006 (aronsson) (diff) (history)
(download) << Previous Next >>
http://runeberg.org/rodarum/01.html
[Valid HTML 4.0!]
urban@yoda:~/labbmapp$

Hitta rader med ett visst ord; grep

Vi kan också läsa alla rader där namnet "Falk" står. Det gör vi med kommandot grep:

urban@yoda:~/labbmapp$ grep Falk kapitel_1
endast Herr Falk.
Herr Struve försökte begära ordet för att utveckla sig, men Falk fortfor.
Falk vilken gått ut som en flinta för att söka stål kände att han huggit i trä.
- Jag nämnde nyss för bror, upptog Falk samtalet, att jag i dag brutit med mitt
sin manschett, och då Falk gjorde en paus ansåg han sig böra säga något av
Falk och Struve vandrade tillsammans åt Norr samspråkande om handel, sjöfart,
Under det att nya tankar grodde i hans huvud vandrade Falk nedåt Strömgatan och
Detta gjorde unge Falk, men gamla Struve, vilken samma dag inträtt i den
urban@yoda:~/labbmapp$

Vi kan till och med kolla på alla rader som börjar på ett stort H, det lilla "taket" betyder just radens början i det här sammanhanget.

urban@yoda:~/labbmapp$ grep ^H kapitel_1

Den som vill hitta fler sådana knep kan slå kommandot man grep och läsa under rubriken REGULAR EXPRESSIONS, men nu är vi inne på en av de delar av kommandoraden, som jag personligen tycker är knepigast att komma inpå livet. Vi ska lämna det alldeles strax, men först ska vi fixa till början på filen.

Ändra innehållet i flykten med sed

urban@yoda:~/labbmapp$ sed /^$/d kapitel_1 > temp

Programmet sed är en strömeditor, det vill säga ett program som kan ändra och filtrera i en dataström (fil säger vi till vardags) "i flykten". i kan emellertid inte spara filen med samma namn utan måste tillfälligtvis pytsa över innehållet i en annan fil, som jag kallar temp.

Här är en hel rad med småfinesser att analysera. Krumeluren ^$ är ett till exempel på "regular expression" eller reguljärt uttryck, som vi ofta säger på svenska. Tecknet ^ betyder, som vi var inne på tidigare redens början, och dollartecknet betyder radens slut. Vi var ju inne på att där fanns tomma rader och de kan ju sägas sluta direkt när de har börjat.

/någonting/d betyder att alla förekomster av mönstret "någonting" ska tas bort (delete).

Tecknet > betyder att det som normalt skulle ha hamnat på skärmen i stället sparas i en fil. Det är en generell finess i skalet och inget som gäller bara när du använder sed. Du kan lila gärna skriva exempelvis:

urban@yoda:~/labbmapp$ ls -l > lista

Då sparar du en lista av dina filer i en fil.

Vi ska modernisera språket en aning, nämligen genom att byta ut alla förekomster av ordet "voro" till det modernare "var". Det gör vi också med sed.
s står där för substitute, alltså byt ut och g innebär att det ska göras för alla förekomster.

urban@yoda:~/labbmapp$ sed s/voro/var/g temp > temp1

Jämför filer med diff

Nu vill vi kanske jämföra de två filerna kapitel_1 och temp1. Det händer rätt ofta att man sitter med ett gäng filer som är nästan lika och undrar vad som skiljer. Då är kommandot diff räddningen.

urban@yoda:~/labbmapp$ diff kapitel_1 temp1
1,16d0
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
26c10
< icke blivit öppnad för allmänheten och rabatterna voro ej uppgrävda;
---
> icke blivit öppnad för allmänheten och rabatterna var ej uppgrävda;
191c175
< om att vaktmästarne även voro tjänstemän.
---
> om att vaktmästarne även var tjänstemän.

Tecknet  <  betyder att raden bara finns i den första filen, tecknet > betyder att den bara finns i den andra. I normalfallet visas inte reder som är lika, men läs man-sidan om du inte gillar det.

Nu är det ju så att det vi verkligen vill ha ligger i filen temp1 medan originalfilen kan kastas bort. Vi döper sedan om filen temp1 till kapitel_1.

urban@yoda:~/labbmapp$ rm kapitel_1
urban@yoda:~/labbmapp$ mv temp1 kapitel_1

Egentligen var ju det första kommandot onödigt, men jag tog med det för tydlighets skull. Kommandot mv (move) har den dubbla användningen att byta namn på en fil och att flytta en fil från ett ställe till ett annat.

Räkna rader och ord med wc

Ett till bra kommando i sammanhanget är wc (ingen dasshumor nu, wc står för word count).

Antalet rader får du fram med wc -l (lines) och antalet ord med wc -w (words). Bra att veta, i synnerhet om någon begär av dig att du ska knåpa ihop en text med säg 1000 ord.

urban@yoda:~/labbmapp$ wc -l kapitel_1
365 kapitel_1
urban@yoda:~/labbmapp$ wc -w kapitel_1
4041 kapitel_1

Vi städar bort ett par onödiga filer:

urban@yoda:~/labbmapp$ rm lista temp

Såja, då har vi lärt oss att döpa om (mv) och ta bort (rm) filer. Vi har tittat på filernas innehåll med head, tail, grep, diff och wc samt manipulerat innehållet med sed. Okej, det där med sed och grep har vi nog anledning att återkomma till och likaså den där omdirigeringsfinessen med >.

Du börjar ha en riktigt anständig uppsättning av kommandon för att navigera i filsystemet och för att hantera textfiler. Glöm inte att repetera och tillämpa på egen hand och kämpa på med man-sidorna.

Kommentera gärna bloggen. Det finns ofta fler sätt att göra saker, kanske smartare sätt, men definitivt fler...

 

 

Läs även andra bloggares åsikter om Linux, Unix, Ubuntu, terminalen, kommandon, mv, rm, head, tail, grep, diff, wc

Bloggtoppen.se Creeper [Intressant?]    

 



Inskrivet av urban_anjar lör, 2008-08-09 15:22 urban_anjar blogg | logga in eller registrera dig för att kunna kommentera