Linux har en række mindre værktøjer til at håndtere af tekstfiler. Vi vil i dette afsnit se lidt nærmere på dem.
diff udskriver forskellen mellem to filer. Lad os se på filerne fil1 og fil2.
[daisy@linux daisy]$ cat fil1 Per Poul Bent [daisy@linux daisy]$ cat fil2 Per Bjarne [daisy@linux daisy]$ diff fil1 fil2 2,3c2 < Poul (oversat: ud går Poul) < Bent (oversat: ud går Bent) > Bjarne (oversat: ind kom Bjarne) |
uniq fjerner ens linjer, der kommer efter hinanden, hvilket illustreres nedenfor.
[daisy@linux daisy]$ cat per3 Per Per Per [daisy@linux daisy]$ uniq per3 Per |
cmp sammenligner filer og stopper læsningen af filerne, når cmp finder en forskel.
wc står for Word Count, og som navnet antyder, tæller den ord i en fil. wc har nogle options: "-l", "-w" og "-c" for Lines, Words og Characters.
Vil du vide, hvor mange linjer en fil indeholder, skriver du wc -l fil. wc er særlig god sammen med andre kommandoer og | (pipe), f.eks. vil nedenstående kommando tælle op, hvor mange filer, der er i kataloget /usr/bin
[daisy@linux daisy]$ ls /usr/bin | wc -l 1208 |
Eller hvis du vil vide, hvor mange kataloger der er i /etc
[daisy@linus daisy]$ ls -l /etc | grep ^d | wc -l 23 |
Forklaringen er som følger: ls -l giver den lange liste med egenskaberne for filerne med en fil pr. linje. Det allerførste tegn på linjen angiver filtypen. d betyder, at det er et "directory" - et katalog. grep ^d lader kun de linjer, der starter med d, passere. wc -l tæller antallet af linjer, den modtager.
tail - uden options - udskriver de 10 sidste linjer af en fil, "-5" vil udskrive de 5 sidste linjer, og "+8" vil udskrive fra og med linje 8 i en fil. Lad os se på et eksempel.
[daisy@linus daisy]$ cat sang Jeg bærer med smil min byrde, jeg drager med sang mit læs; jeg er som den vilde hyrde, der genner sit kvæg på græs. [daisy@linus daisy]$ tail -2 sang jeg er som den vilde hyrde, der genner sit kvæg på græs. |
tail har en meget nyttig "f"-option. Den får tail til løbende at vise de sidste 10 linjer af en fil, f.eks. vil du med tail -f /var/log/messages kunne følge, hvad alle system-dæmoner og lignende rapporterer.
head svarer til tail, men i stedet for slutningen af en fil, er det begyndelsen. head - uden optioner - udskriver de 10 første linjer af en fil. Optioner kan gives som for tail.
cut tager det, du specificerer i options, ud af en linje, dvs. -cx-y: tager fra tegn nr. x til tegn nr. y på hver linje i den specificerede fil. Er der kun et tal, tages kun dette tegn ud. -fx-y er som for c, men her drejer det sig om felter, og -d'X' angiver felt-separatoren.
Vil du se, hvilke brugere der har adgang til systemet, så prøv: cat /etc/passwd | cut -d':' -f1
paste samler filer lodret, hvor cat samler (kan samle) filer vandret. Lad os se på følgende eksempel. Du ønsker nu at samle to filer, navne og iq, således at linje 1 fra navne efterfølges af linje 1 fra iq (uden at dette dog skulle være konkluderende, for såvidt angår de tilfældige sammenstillinger af for- og efternavne samt tal).
[daisy@linus daisy]$ cat navne poul nyrup 52 holger beck-nielsen 90 william gates 55 torvald linus ?? [daisy@linus daisy]$ cat iq 50 230 120 ?? [daisy@linus daisy]$ paste navne iq poul nyrup 52 50 holger beck-nielsen 90 230 william gates 55 120 torvald linus ?? ?? |
tr erstatter det første argument med det andet. tr er en lidt speciel sag. Den forventer, at få input fra stdin. Derfor må du bruge følgende fremgangsmåde, hvis du vil erstatte noget i fil1, og skrive indholdet til fil2. Hvis du ønsker, at alle små tegn skal erstattes med store, skulle følgende kunne lade sig gøre.
[daisy@linus daisy]$ tr '[a-z,æ,ø,å]' '[A-Z,Æ,Ø,Å]' < fil1 > fil2 |
Det er ikke sikkert, at din distribution eller dit system vil godtage de danske tegn, men vi har afprøvet det på Red Hat 6.0, hvor det virker.