Introduktion till datateknik för språkvetare ht2015 - STP

Introduktion till datateknik
för språkvetare
ht 2015
Per Starbäck
Kapitel 1
Inledning
1.1
Om kursen
Schema och annat finns på http://stp.
lingfil.uu.se/kurs/ids/. Där kommer det
även finnas länkar till de olika delarna av detta
kompendium.
Mål (citerat från kursplanen)
Kursen skall förmedla grundläggande kunskaper
om datasystem och databehandling, som en bas
för databehandling av naturligt språk.
Efter avslutad kurs ska studenten minst kunna:
• nämna och översiktligt förklara funktionen
hos en modern datorhårdvaras viktigaste
komponenter, inklusive externt och internt
minne och andra viktiga digitala media
• nämna och översiktligt förklara funktionerna
hos ett vanligt operativ- och filsystem
• skapa och använda filer i de vanligaste formaten för textdokument med elementär typografi, spela in och spela upp ljudresurser,
samt visa bilder
• översiktligt redogöra för begreppen teckenkodning, ordbehandling, elektronisk typsättning och filöverföring samt arbeta praktiskt
med dem i några elementära sammanhang
• använda program för elementär textbearbetning och enkel kvantitativ analys
• översiktligt förklara begreppen klient/serversystem, Internet, www, webserver och webläsare
• skapa HTMLsidor och publicera dem på nätet
• översiktligt beskriva hur någon viktig söktjänst på nätet fungerar och använda denna
på ett avancerat sätt
• resonera kring digitala rättighetsfrågor i relation till konkreta objekt
Examination
För att få godkänt på kursen ska man göra klart
inlämningsuppgifterna i samtliga moment. Bland
Figur 1.1: Ett gnuhuvud som symboliserar operativsystemet GNU (= GNU’S Not Unix)
annat för att underlätta min kontroll ska uppgifterna göras på våra datorer här, och man ska vara närvarande vid undervisningstillfällena. Om du
någon gång inte kan närvara så hör av dig i förväg
om detta!
Bara betygen underkänt och godkänt finns på
denna kurs.
1.2
Vårt datorsystem
På STP används operativsystemet GNU/Linux
som är ett system som liknar operativsystemet
Unix. Vid »normalt« användande är det mest
på skrivbordsmiljön man märker skillnad på system, med menyer, paneler, ikoner osv. Den heter
Gnome och är gjord särskilt för GNU, men går
även att köra på andra Unix-liknande system. I
denna kurs kommer vi inte att använda det särskilt mycket, utom denna första gång. Det ska ni
till största delen kunna sätta er in i med den inbyggda hjälpen.
I labbarna kommer vi istället mycket att hålla
på med kommandoraden och annat som är svårare
att komma in i på egen hand.
3
1. INLEDNING
Våra datorsalar
De datorer som ni använder finns i två datorsalar,
tillsammans med servrar som även går att använda utifrån. Dessutom har en del anställda datorer
som ingår i samma system.
Våra datorer har fått namn som t. ex. preposition, futurum, dativ och numerus. Institutionen för lingvistik och filologi har domännamnet
lingfil.uu.se, så datorernas fullständiga namn
är i stil med numerus.lingfil.uu.se. Den datorn har även aliaset stp.lingfil.uu.se och det
är dit man ska koppla sig ifall man ska arbeta på
våra datorer utifrån, t. ex. hemifrån.
De två datorsalarna är öppna dygnet runt, året
runt, och är tillgängliga med era passerkort med
vilka ni också kommer in i huset. När salarna inte
är bokade för undervisning är det bara att slå sig
ner vid en ledig dator där.
Med rätt program på en annan dator kan man
också koppla sig till våra datorer utifrån och komma åt samma filer och program som man når från
datorsalarna.
dan vid första steget genom att alla användare har
goda lösenordsvanor.
Att logga ut
När du lämnar datorn ska du logga ut. Använd
Log Out i menyn till höger som du får genom att
klicka på ditt namn. Stäng inte av datorn! Dessa
datorer står på dygnet runt, bland annat för att
uppdateringar ska kunna göras utifrån.
Man kan istället låsa datorn om man lämnar
den en kortare stund. Andra kan också logga in
på datorn då.
Ljud
För att inte få för mycket olika ljud i datorsalarna
så använder vi hörlurar. Volymkontrollen finns i
överpanelen på skärmen, men observera att en del
hörlurar dessutom har en egen volymkontroll, så
om det inte hörs något kan det vara kontrollen där
som behöver ändras snarare än något på datorn.
Datorernas hörlurar ska sitta i ett urtag på baksidan
av datorn. Det finns även ett urtag för hörAtt logga in
lurar på framsidan som används som urtag för exNär man ska använda systemet måste man först tra hörlurar ibland. Flytta inte de normala hörlulogga in. Ditt användarnamn och lösenord får du rarna dit. Då blir lätt sladdarna liggande på golvet
av Per. Till användarnamnet finns knutet en sär- och sönderkörda av stolarna, och det blir besvärskild hemkatalog där man kan lagra sina filer.
ligare för den som vill koppla in egna hörlurar.
Att välja lösenord
Tangentbord
På alla ställen där man ska sätta ett lösenord brukar man uppmanas att ha säkra lösenord: »Undvik
lättgissade lösenord! Använd inte riktiga ord, varken på engelska, svenska eller något annat språk!
Använd inte samma lösenord som på något annat
ställe!« Och så vidare.
I själva verket är förstås lösenord till olika ställen olika viktiga, och ibland kan det mycket väl
duga att använda samma slasklösen på flera ställen där man behöver registrera en användare med
lösenord för att kunna använda någon tjänst.
Men i en del fall är det viktigare, och detta är ett
sådant fall, så om du ändrar ditt lösenord så se till
att du följer sådana regler. Blanda gärna stora och
små bokstäver (de räknas som olika!) och stoppa
gärna in nån siffra eller nåt skiljetecken.
Ett skäl till att det är viktigt att alla har bra lösenord, förutom ens egen säkerhet, är systemets
säkerhet. På datorer som sitter på nätet pågår hela tiden försök från olika håll att ta sig in olovligen
på datorerna och få administratörsrättigheter där.
Sådana attacker sker ofta i två steg. Först behöver
förövaren komma in på datorsystemet överhuvudtaget, sedan hitta ett öppet säkerhetshål som
kan ge mer behörighet. Det andra steget är det
upp till systemadministratörerna att ha stoppat,
men för säkerhets skull bör det även ta stopp re-
Våra tangentbord är uppsatta så att vissa tangenter med accenter är döda (se figur 1.2), dvs. inte
ger något tecken av sig självt utan bara i kombination med nästa tecken. Det gäller dels en tangent
med vilken man kan skriva t. ex. »ú« och »ù«. Dels
en tangent med vilken man kan skriva t. ex. »ü«,
»û« och »ũ«. Den sistnämnda står till höger på tangenten och får man därför fram tillsammans med
AltGr. AltGr (= Alternate Graphic) kan kombineras med en mängd tangenter för att ge andra
tecken. Många av dessa står till höger på den tan-
4
Figur 1.2: De två döda tangenterna på våra tangentbord
1.3. Filer och kataloger
En fil foo.c kan innehålla källkoden till ett program skrivet i programspråket C, foo.exe vara den exekverbara binärfilen med programmet,
foo.pdf en text (i formatet Portable Document
Format) som beskriver programmet, foo.html
samma text som HTML (Hypertext Markup Language), och så vidare. Ofta finns det en begränsning på hur lång filnamnsändelsen får vara. I syn1.3 Filer och kataloger
nerhet kan gränsen vara tre tecken, vilket är förData av olika slag lagras i filer.
klaringen till att man ibland kan se t. ex. HTMLInnehållet kan vara bl. a. texter, ljud, bilder, filer vars namn slutar på .htm istället för .html.
databaser och program, och allt ligger normalt
Även i Unix-filsystem brukar man ge många filagrat som en sekvens av bytes, som kan ses som ler sådana namn, men en punkt är egentligen som
värden 0–255, i ett visst format, dvs. kodade en- vilket tecken som helst i filnamn, så ett filnamn
ligt någon särskild konvention. Detta återkommer kan innehålla ingen, en eller flera punkter, och det
vi till senare.
finns ingen särskild begränsning på hur lång delen
Filer med program omfattar både källkoden av namnet efter punkten får vara.
(textfiler skrivna av programmerare, skrivna i ett
Genom att man ger filnamnen sådana ändelser
visst programspråk) och filer som inte är läsbara är det lättare för såväl program som människor att
för människor (binärfiler), men vars innehåll kan förstå vad det är för slags filer utan att titta i dem.
tolkas som instruktioner som kan utföras (exekve- Några få av de vanligare filnamnsändelserna är:
ras) direkt av datorn. (De senare genereras automatiskt från de förra med program som kallas
txt
Vanliga textfiler
kompilatorer.)
html
Hypertext Markup Language
xml
eXtensible Markup Language
tex
Typsättningssystemet TEX
Kataloger
java
Programspråket Java
Filerna samlas i kataloger (directories). När man
pl
Programspråket Perl
använder kommandoraden är denna beteckning
py
Programspråket Python
ofta vanligare än mappar (folders). Det finns dels
wav, ogg, mp3 Olika ljudformat
centrala kataloger till för systemet och dels har
gif, png, jpg Olika bildformat
varje användare sin egen hemkatalog att lagra filer
i.
pdf
Portable Document Format
I en katalog kan det förutom filer ligga andra
odt
Open Document Text
kataloger, underkataloger (subdirectories), till den
första katalogen.
gent det gäller (t. ex. C på AltGr + e), men det
finns andra också, t. ex. þ på AltGr + t.
För att skriva ^, ~ och ` som egna tecken kan
man trycka ett mellanslag efter den döda tangenten.
Fil- och katalognamn
I Unix-system är det skillnad på små och stora
bokstäver vad gäller namn på filer och kataloger.
Det går därför t. ex. att ha en fil som heter »readme«, en annan fil som heter »README« och en
tredje som heter »ReadMe« i samma katalog. Vanligtvis låter man dock de flesta filerna ha namn
med bara små bokstäver.1
Även om det går bra att ha filnamn med mellanslag i brukar man undvika det för filer som
man ska hantera med kommandoraden. Ni kommer snart att förstå varför!
Filnamnsändelse
I många filsystem har alla filer en ändelse till det
egentliga filnamnet. Denna talar om vad det är
för slags fil och brukar skrivas efter en punkt.
Körbara program brukar inte ha någon ändelse i Unix, så en kompilerad version av programmet foo heter troligen bara foo (och inte
t. ex. foo.exe). Vanliga textfiler har ofta ändelsen .txt.
Dolda filer
Många program skapar själva filer och kataloger
i ens hemkatalog där de sparar sina inställningar
eller mellanresultat som det inte är tänkt att man
normalt ska behöva titta närmre på. För att man
inte ska störas av dem i ens fillistningar så brukar
de filerna vara dolda. Detta går i Unix till så att
filen eller katalogen har ett namn som börjar med
punkt (.). Filhanterare och andra program som
listar filer nämner normalt inte sådana filer och
dessa filer kan oftast ignoreras.
Filträdet
1 Sådana
där uppfordrande filer README brukar dock faktiskt heta just så, med stora bokstäver, och är textfiler som
beskriver övriga filer i samma katalog.
Nästan varje katalog är underkatalog till en annan
katalog. I Unix är det bara en katalog som inte
5
1. INLEDNING
/ (roten)
bin
cp
ls
home
mv
staff
stp14
starback
Desktop
ellen
fotografier
stp15
local
usr
bin
x14
x15
kurs
kanske din
hemkatalog
kanske din
hemkatalog
ids
eulang.tsv
konto.txt
firefox
kmines
verb.txt
slottet.jpg
Figur 1.3: I detta filträd är filer skrivna i fetstil. Allt annat är kataloger. Detta är förstås bara ett utdrag från det
fullständiga filträdet. I varje katalog finns det många fler grenar som inte är utritade här.
är det, så man kan tänka sig alla kataloger i ett
hierarkiskt träd där allt grenar ut sig från denna
katalog och där filerna är löv längst ut. Den katalog som allt utgår från kallas för roten. Till skillnad från riktiga träd tänker man sig att roten sitter högst upp och att trädet förgrenar sig nedåt,
så underkatalogerna ligger alltså längre bort från
roten. I figur 1.3 visas en del av filträdet här.
Här är t. ex. hemkataloger för STP15 underkataloger till en katalog stp15 som i sin tur är
underkatalog till en katalog home som samlar allas
hemkataloger. Den i sin tur är underkatalog till
roten (/).
De studenter som inte går på programmen får
istället hemkataloger som är underkataloger till
en katalog x15 för externa studentkonton skapade
2015, som även den är en underkatalog till home.
Fullständiga sökvägar
Man kan ange en fullständig sökväg (path) till
en fil eller katalog genom att ange katalog för
katalog hur man kan ta sig från roten till denna plats i filträdet. Före varje led, inklusive det
Bara en rot: I Unix använder man filsystem med
bara en rot, oavsett hur många diskar som är anslutna till datorn. I MS Windows använder man
flera, som har bokstäver som namn. En fullständig
sökväg börjar med den bokstaven följt av ett kolon, så det fullständiga namnet på en katalog där
kan se ut som C:\WINDOWS\. Observera att där används bakstreck (\) medan Unix använder vanligt
snedstreck (/) som avgränsare mellan kataloger.
6
första, skriver man ett snedstreck. Om en student på STP15 med användarnamnet »ellen« hade en underkatalog med namnet fotografier
och i den lade filen slottet.jpg skulle alltså /home/stp15/ellen/fotografier/slottet.
jpg vara den fullständiga sökvägen till denna fil
och /home/stp15/ellen/fotografier vara den fullständiga sökvägen till den katalog där denna fil
ligger.
En sådan fullständig sökväg börjar alltid med
ett snedstreck. Den fullständiga sökvägen till rotkatalogen är bara ett tecken: /.
Det finns ett särskilt förkortat skrivsätt för ens
egen hemkatalog, nämligen tecknet ~ (tilde). Ellen skulle därför också kunna skriva
~/fotografier/slottet.jpg
som en fullständig sökväg till samma fil. Ovan
står det att fullständiga sökvägar alltid börjar med
snedstreck. Det gör i princip även denna sökväg
eftersom ~ här bara är ett förkortat skrivsätt för
/home/stp15/ellen.
Man kan även ange andras hemkataloger på
ett förkortat sätt, nämligen med tilde följt av ett
användarnamn. Även andra användare kan alltså använda beteckningen ~ellen/fotografier/
slottet.jpg för den där filen, och ~ellen för Ellens hemkatalog.
De flesta program som hanterar filnamn byter
ut ~ på detta sätt.
1.4
Grafisk filhantering
Det finns flera sätt att hantera filer i den grafiska
miljön, där ett är att öppna kataloger från menyn
Places . Därifrån kan man bland annat nå Home för
1.5. Klipp och klistra
ens egen hemkatalog, och några speciella underkataloger till den, som Documents och Downloads .
För du muspekaren till övre vänstra hörnet dyker
det upp ett antal ikoner i vänsterkant, varav Files
är ett annat sätt.
Man kan också dubbelklicka på ikonen för
hemkatalog på skrivbordet för att öppna den. På
skrivbordet visas även alla filer och kataloger som
ligger i ens katalog Desktop, så lägger man saker där hamnar de egentligen i den katalogen
Desktop. Denna katalog Desktop är en underkatalog till ens hemkatalog.
1.5
Klipp och klistra
Klipp-och-klistra (cut and paste) är ett vanligt sätt
att föra över text från ett ställe till ett annat. Med
tiden har har tangenterna X, C och V blivit en
vanlig standard för detta (ursprungligen från Apple Computer på 1980-talet). Här används dessa tillsammans med Control-tangenten, dvs. CtrlX (cut), Ctrl-C (copy) och Ctrl-V (paste). (Att
trycka ner Control-tangenten tillsammans med
t. ex. X betecknas ibland Ctrl+X ibland Ctrl-X,
ibland bara C-x.)
Det finns även ett snabbare sätt att kopiera.
Med mittknappen på musen, den som också är
scrollhjul, klistrar man in primary selection, vilket
är den text man senast markerat. På det sättet kan
man kopiera text utan att behöva använda vare sig
tangentbord eller meny.
tersom den har särskilda rutiner för att tolka och
konvertera andra format.
Textfiler med ren text är däremot inte speciella för något särskilt program utan kan hanteras av
alla program som gör något med text utan sådan
konvertering. Det enda som kan skilja är vilken
teckenkodning som har använts, dvs. vilka numeriska värden olika tecken kodats med. Om textfilen innehåller »exotiska« tecken som grekiskt π ,
ryskt eller för den delen de svenska bokstäverna
åäö kan detta ha olika koder i olika sammanhang,
men så länge det är tecken som finns på ett vanligt
(amerikanskt!) tangentbord så är det nästan alltid
samma koder överlag. Då kodas t. ex. tecknet »A«
som 65 och tecknet »&« som 38. Teckenkodningar
återkommer vi till senare.
1.7
Editorer
Sådana rena textfiler skriver man inte med ordbehandlare utan med editorer. Ibland säger man
textredigerare och att redigera text, men med den
drastiskt välkomnande inställning som datorvärlden oftast visar inför lån från engelskan är det vanligare att tala om editorer och att editera text med
dessa.
Editorer har ofta kraftfulla kommandon för att
hjälpa till när man editerar olika slags textfiler, i
synnerhet när man programmerar, genom att de
känner till syntaxen i olika programspråk.
I denna kurs kommer vi inte att använda ordbehandling, och de textfiler som du ska skriva här
ska istället skrivas med en editor. Om du vill använda en ordbehandlare på våra datorer så rekom1.6 Textfiler
menderas annars LibreOffice.org som finns i meMed vanliga textfiler eller rena textfiler (plain text) nyerna.
avses enkla textfiler utan sådana finesser som varierande typsnitt eller inlagda bilder som en ordbehandlare kan klara av, utan med bara en räcka Emacs
bokstäver, siffror och en del andra tecken, uppde- Den editor som vi använder här, Emacs, kan starlade i rader. Det saknas alltså dolda formatmarke- tas med Applications Accessories Emacs (men i labringar så som finns i ordbehandlingsfiler.
ben kommer vi att göra på ett annat sätt). Det
När man skriver ett program är det alltid en fungerar bäst att öppna alla filer man editerar i
textfil med ren text man skriver. Det går t. ex. in- samma Emacs istället för att avsluta den bara för
te att skriva en del av programmet i kursiv stil och att man är klar med en viss editering. Det är ungedärmed få detta att betyda någonting särskilt, ut- fär så som man normalt tittar på alla webbsidor i
an programmet består bara av en räcka bokstäver, samma webbläsare och ofta inte avslutar den försiffror och interpunktion, uppdelade i rader. (När rän man är på väg att logga ut.
man återger ett program på papper eller skärm
så visar man det dock ofta med olika färger eller
olika stilar ändå.)
1.8 Filskydd
Olika ordbehandlare har oftast helt olika format för hur sådana finesser ska kodas i filerna, De flesta av dina filer kan läsas av vem som helst,
så ett dokument skrivet i Microsoft Office och men bara ändras eller tas bort av dig själv. Du
ett dokument skrivet i WordPerfect är helt olika kan själv ändra filskyddet för de filer och kataloger
kodade även om dokumenten ser likadana ut på du vill ha skyddade så att endast du själv kan läpapper.
sa dem. (En del program skapar alltid sina filer
Trots det går det ofta att öppna ett ordbehand- skyddade. Det skulle till exempel ett chattprolingsdokument i en helt annan ordbehandlare ef- gram som sparar loggar över chatten göra, även
7
1. INLEDNING
Figur 1.4: Detta är ungefär vad filhanteraren visar
om filen konto.txt i era hemkataloger. Den påstår
bland annat (helt korrekt) att det är en vanlig textfil
(plain text).
Figur 1.5: Denna fil får ägaren och gruppen läsa
och skriva, men övriga får bara läsa den.
om man normalt skapar filer som inte är lässkyddade.)
För varje fil och katalog talas om vilka rättigheter som gäller för tre kategorier användare:
• filägaren (u = user)
• gruppen (g = group)
• övriga (o = other)
Varje fil har alltså en ägare och en grupp. Varje
användare har en egen personlig grupp som bara
den användaren själv är med i, och detta är den
normala gruppen för dina filer. Det gör att gruppens rättigheter normalt inte är intressanta, utan
när du ändrar filskydd så är det framförallt för att
göra filer läsbara för alla eller bara för dig själv.
Du kan t. ex. ha en särskild privat underkatalog
som är lässkyddad för andra.
Varje kategori kan ha rättighet att
• r = läsa (read)
• w = skriva (write)
• x = köra (execute)
Den exakta betydelsen skiljer sig åt en del för
filer och kataloger:
• r = läsa en fil; lista innehållet i en katalog
• w = ändra en fil; skapa och ta bort filer i katalogen
• x = köra ett program; komma åt filer i katalogen
När du högerklickar på en fil eller katalog kan
du välja Properties för att få se diverse egenskaper
för den filen eller katalogen, inklusive dess skydd.
I figurerna 1.4 och 1.5 visas en del av den information som detta ger om filen konto.txt i era
hemkataloger.
I den andra av dessa kan man inte bara se vilket
skydd som gäller nu, utan även ändra skyddet.
Om man vill att en fil ska kunna läsas av några andra användare men inte av alla så är möjligheterna rätt begränsade. Då måste de användarna
höra till samma så kallade grupp och även den filen måste höra till samma grupp. Varje fil hör till
exakt en grupp. Användare kan vara med i flera
grupper, men det går inte att skapa nya grupper
själv.
8
1.9
Kommandoraden
Det vanliga gränssnittet innan det grafiska gränssnittet slog igenom var kommandoraden. Användaren skriver ett kommando på tangentbordet
varpå datorn utför kommandot och inväntar nästa kommando. Kommandona har en enkel syntax
som oftast bygger på engelska. Det kan vara i stil
med PRINT FOO.TXT för att skriva ut en fil med
namnet FOO.TXT.
Även om grunden inte är svårare än så, så finns
det luriga element i detta för den som inte är van,
och vi kommer därför att ägna oss mycket åt detta
i kursen.
Att arbeta med datorn på detta sätt kan ofta
verka bökigt och föråldrat för den som är ovan,
men det är det mest användbara för en del avancerad användning. Några fördelar är:
• Det är ofta kraftfullare.
• Det är ofta effektivare (när man kan det).
• Det är lättare att bevara en mängd instruktioner så att man kan göra om samma sak
senare, kanske med variationer, kanske automatiskt.
(Dessa fördelar kommer inte alls att vara uppenbara från början. Vi kommer att lösa uppgifter på detta sätt som många förmodligen lättare
hade kunnat lösa på andra sätt.)
1.9. Kommandoraden
• Skalet skriver ut en prompt, en kort text som
visar att det är berett att ta emot ett kommando.
• Skalet ekar det användaren skriver, suddar
när man trycker på radertangenten osv.
• När användaren avslutar sitt kommando (genom att trycka på returtangenten) utför skalet kommandot, oftast genom att köra igång
ett visst annat program.
• Om detta resulterar i output så skrivs den ut.
Ovanstående görs om och om igen.
Figur 1.6: En populär teleprinter på 1960-talet var
ASR33 som tillverkades av Teletype Corporation.
Kommandon
Unixkommandon är ökända för att ha korta och
kryptiska namn. Några exempel:
Terminalen
Kommandoraden är äldre än bildskärmen. Från
början skrev man in sådana här kommandon på
något som liknande en skrivmaskin eller teleprinter med en pappersremsa i. Om man gav ett kommando där man bad datorn om information så
skrev den ut den på samma pappersremsa.
Ofta fanns det flera sådana »skrivmaskiner«
kopplade till samma dator, och dessa kallades för
terminaler.2 Senare kom terminaler med bildskärmar istället för papper. Bildskärmen kunde bara
visa text och visade hela tiden de sista raderna av
låtsaspapperet. Det är normalt bara det man är intresserad av ändå, för där står ju de senaste kommandona man givit och vilka svar man har fått
från dessa. Idag kan man köra ett särskilt terminalprogram i sitt fönstersystem som ger en sådan
låtsasterminal i ett fönster bland ens andra fönster.
Det kan hjälpa att ha detta i bakhuvudet när
man ska förstå hur detta terminalfönster fungerar. Tänk dig att det är (slutet av) en pappersremsa du ser. Det innebär t. ex. att den text som har
skrivits där är oföränderlig. Om man ger ett kommando som får datorn att lista ens filer så ändras
inte den utskriften senare om man lägger till eller
tar bort en fil. För att få en aktuell lista får man
ge kommandot igen. (Det som visas är en logg för
ens interaktion med datorn, lite som en logg efter att man har chattat med en robot som lyder
ens kommandon.) Man kan bara skriva in kommandon längst ner, efter all text som redan finns i
fönstret.
Skalet i Unix
Det program som tolkar och utför användarens
textkommandon kallas i Unix-världen för ett skal
(shell). I princip är det enkelt:
2 En terminal är ju någonting som är längst ut, och dessa
var då ändpunkter medan datorn satt i mitten, kopplad till
dem alla.
•
•
•
•
•
•
•
•
•
•
•
cat = (con)catenate
cd = change directory
cp = copy
ls = list
mkdir = make directory
mv = move
pwd = print working directory
rm = remove
rmdir = remove directory
tr = translate
wc = word count
Skälet till det är förstås att man inte ska behöva
skriva så mycket.
Några av dessa kommandon ser du i filträdet i
figur 1.3 i katalogen /bin.
Kommandot ls listar t. ex. filer i en viss katalog.
När man använder det kan det se ut så här:
$ ls
bar.png
foo
foo.py
kvack.png
texts
Användaren har här bara skrivit ls och tryckt
på retur. I denna katalog fanns det fem filer och
kataloger, och de listas i bokstavsordning.
Den text som användaren har skrivit ges med
ljusgrå bakgrund, så här , i dessa exempel. Användaren har t. ex. inte skrivit dollartecknet, utan det
var den prompt som skalet skrivit ut. (Oftast har
Returtangenten: Returtangenten har oftast (och
så är det på våra tangentbord) en vinklad pil på sig,
. Den har kallats för carriage return (vagnretur)
eller oftare bara return (retur). Den carriage/vagn
det handlar om går tillbaka till skrivmaskiner på
papperstiden.
Ibland kallas tangenten även för Enter , som tangenten med det namnet på den särskilda numeriska delen av tangentbordet. Dessa två tangenter har
oftast samma effekt.
9
1. INLEDNING
man en längre prompt än så. Du kommer att ha
en prompt där även ditt användarnamn och namnet på datorn står, i stil med ellen@verb$, men i
alla kommande exempel antar vi ändå att prompten bara är ett dollartecken.)
Argument till kommandon
Efter kommandonamnet kan det följa argument,
åtskilda av mellanslag. Dessa talar om mer specifikt vad man vill använda ett kommando till. Ofta
är det filnamn.
Man kan ge kommandot ls argument som talar
om vilka filer eller vilka kataloger som ska listas.
$ ls kvack.png bar.png
bar.png kvack.png
Här har vi talat om precis vilka två filer vi vill
ha listade.3 (De önskade filerna listas i bokstavsordning som förut, trots att argumenten listades i
en annan ordning.)
Om ett argument till ls är namnet på en katalog så listas innehållet i den katalogen. Så om
texts ovan är en katalog med ett par textfiler i
skulle man kunna få detta resultat:
$ ls texts
etaoin.txt shrdlu.txt
För ls behandlas alla argument lika – denna fil eller innehållet i denna katalog ska listas.
För en del kommandon tolkas däremot första,
andra, (tredje osv.) argumentet olika. Kommandot cp foo.txt bar.txt betyder t. ex. att filen
foo.txt ska kopieras och att kopian ska ha det
nya namnet bar.txt. Det första argumentet är
källan och det andra är destinationen. Om man
hade satt argumenten i omvänd ordning hade det
betytt något annat, och om man haft bara ett argument skulle man ha fått ett felmeddelande.
3 Detta är förstås rätt poänglöst att göra. Det verkar ju som
om vi redan visste att dessa två filer fanns! Senare ska vi se
hur man kan få ls att lista mer information om filerna, vilket
skulle göra exemplet lite mer realistiskt.
10
Inlupp 1: Inledning
Grafisk filhantering
Välj Places Home i menyerna för att ta fram ett
fönster för din hemkatalog.
Ni har alla fått en fil konto.txt och underkataloger som heter Desktop, nobackup
och introduktion-till-datateknik. Den sistnämnda är förstås specifik för just denna kurs, och
kallas i fortsättningen för kurskatalogen.
Dubbelklicka på kurskatalogen för att se på
den underkatalogen. Olika slags filer visas på olika sätt. Filhanteraren avgör hur genom att se på
filnamnsändelsen och genom att se på filernas innehåll. För en del filer visas (delar av) deras innehåll, och för andra bara ikoner som visar vad för
slags filer det är.
Genom att dubbelklicka på filerna så öppnas
de. Vilka program som används för att öppna dem
beror på vad det är för filer. Genom att högerklicka
på en fil får du upp en meny med olika saker du
kan göra med filen.
Höger musknapp används oftast som en menyknapp på detta sätt.
Uppgift 1.1 Vad heter det program som är satt
att vara det normala för att öppna bildfiler? Vad
är det för versionsnummer på det att döma av vad
Help About i det programmet säger?
Uppgift 1.2 Ett av de andra programmen man
kan öppna bildfiler med har ett namn som består
av fyra ord. Det brukar oftare bara kallas för sin
fyrbokstavsförkortning. Vad heter det programmet? (Förkortade namnet räcker.)
(Det är ett mycket ambitiöst ritprogram som
det är rätt jobbigt att komma in i, så kör det inte
nu, men prova gärna senare om du är nyfiken.)
Senare få du veta var du ska skriva dessa svar.
Notera tillsvidare svaren på uppgiftsfrågorna för
senare bruk.
Uppgift 1.3 I kurskatalogen finns även en ljudfil
ord.flac. Vad sägs det för ord i den?
För olika sorters filer händer det som synes olika saker när du dubbelklickar dem. Filen run-me
är t. ex. ett litet program. Det är en exekverbar
binärfil som körs när du aktiverar den.
Uppgift 1.4 Vad står det på knappen som programmet run-me skapar när man kör det?
Uppgift 1.5 Ta bort filen should_not_be_here
i kurskatalogen.
Uppgift 1.6 Skapa en ny underkatalog alice
i kurskatalogen (New Folder). Flytta filerna cheshire-cat.jpg, cheshire-cat.txt och
how-doth.txt dit. (Allt detta är nämligen taget
från boken Alice i Underlandet).
Tänk på att det är skillnad på små och stora
bokstäver.
Det enklaste sättet att flytta en fil är med drag
and drop. Tryck ner vänster musknapp när du pekar på filen och dra den sedan till önskad plats
varpå du släpper musknappen.
Öppna nu katalogen alice. Bland knappar
som står till höger om katalognamnet finns några knappar och genom att hålla muspekaren över
dem får du se vad de gör. En beskrivs som View
items as a list. Välj den för att se fillistningen i ett
textformat som ger mer information. Där visas filens namn, storlek, typ, tidsstämpel för när den
senast ändrades och filskydd.
Uppgift 1.7 Vilken information som visas kan
ändras med Visible Columns i en meny. Nämn någon
av kolumnerna som kan läggas till där.
Uppgift 1.8 Filernas storlek mäts i bytes. Hur
många bytes stor är filen how-doth.txt? Hur kan
du ta reda på det i det andra sättet att se filerna,
»View items as a grid of icons«?
Uppgift 1.9 En av filerna dikt-1.txt, dikt-2.
txt och dikt-3.txt i kurskatalogen är skyddad
så att andra inte kan läsa den. Vilken?
Uppgift 1.10 Ändra så att den inte längre är särskilt skyddad, utan får samma skydd som de övriga. Ändra också så att filen secret.txt bara kan
läsas av dig, men är skrivskyddad för alla, till och
med dig själv.
När du gjort detta riktigt visas det särskilt i
fönstret att denna fil är skrivskyddad.
11
INLUPP 1: INLEDNING
Emacs
I din kurskatalog ligger en textfil med namnet
favourite-colour.txt. Det är en ren textfil
(vilket man kan gissa av filnamnsändelsen .txt).
Dubbelklicka på den i filhanteraren för att öppna
den med editorn Emacs.
Förutom textinnehållet i filen visar Emacs även
information som du kan ta bort med »Dismiss this
startup screen«. I det fönster du får upp finns det
plats för att skriva 80 tecken per rad vilket är vanlig bredd för textfiler. Gör gärna fönstret högre,
men maximera det inte.
Uppgift 1.11 Vad står det i den filen?
I kurskatalogen ligger också en fil exempel.txt.
Ta tag i den och släpp den i Emacs-fönstret med
drag and drop. (Ändra vid behov storlekar så att
du ser dessa två fönster samtidigt, sida vid sida.)
Detta är ett sätt att öppna en till fil när du redan
har en Emacs igång. Den förra filen finns även den
fortfarande öppnad i denna Emacs även om den
inte syns just nu.
De olika texterna som man har aktiva i Emacs
ligger i varsin buffert och i Emacs-menyn Buffers
kan du välja mellan dessa. Gå på detta sätt tillbaka
till favourite-colour.txt igen.
Du ska editera den, så förflytta dig i textbufferten med piltangenterna och spara med knapnär du är klar. (Avsluta däremot inte denpen
na Emacs förrän du är klar för idag!)
Uppgift 1.12 Ändra i favourite-colour.txt
så att den stämmer för dig!
På knappraden i Emacs finns det bland annat
andra knappar för att öppna nya och existerande
filer.
Uppgift 1.13 Öppna på detta sätt en ny fil
favourite-number.txt i kurskatalogen och skriv
där ditt favorittal.
Glöm inte att spara filen!
Det finns även en knapp för att öppna en katalog. Öppna underkatalogen alice på detta sätt.
Du får då upp en fillistning i text som liknar en
du fick med filhanteraren förut.
Öppna cheshire-cat.txt i denna listning.
Det är ett utdrag ur Alice i Underlandet, fast några
stavfel har smugit sig in.
Uppgift 1.14 Använd
Tools
kommandot
för att hitta och
rätta stavfelen. Det blir flera förslag på rättelser
och man får skriva en siffra för att ange vilket
rättningsförslag man vill använda. Hur många fel
hittades?
Spell Checking
12
Spell-Check Buffer
Glöm inte att spara den rättade filen!
Gå tillbaka till bufferten alice med fillistningen och flytta med hjälp av piltangenterna markören till raden med cheshire-cat.jpg. Välj
Operate Copy to i menyerna och kopiera den filen till katalogen Desktop. Kolla att den därmed
har hamnat på ditt skrivbord.
Klipp-och-klistra
Uppgift 1.15 Öppna filen dodo.txt i kurskatalogen i Emacs. Se slutet av avsnitt 1.5 på s. 7 om
det snabbare sättet att kopiera text och använd
det för att kopiera hit text på rätt ställen enligt
vad som står i filen.
Om du råkar göra nåt fel, t. ex. klistrar in fel text
eller text på fel ställe, så kan du ångra dig med
i Emacs.
knappen
Glöm inte att spara filen efteråt!
Svarsfilen
Skriv en ny fil ids1.txt i kurskatalogen (med
Emacs) där du skriver in svaren på dessa uppgifter. (En del uppgifter kräver dock inga svar, utan
är bara av formen »gör si och så«, i stil med uppgift 1.15.)
Se noga till att den filen hamnar i rätt katalog
och heter precis som den ska!
Det kan underlätta att klipp-och-klistra en del
svar så att du inte behöver skriva av text. Använd
som vanligt menyn Buffers för att växla vad du tittar på när du kopierar från en buffert till en annan.
Fler buffertar
Som du kanske märkt finns det fler buffertar i Buffers -menyn, och ett kommando Buffers
List All Buffers som listar alla buffertar. Alla buffertar hänger inte ihop med någon fil.
Uppgift 1.16 Det finns en buffert som heter
*scratch* till exempel. Vad står det i den?
Uppgift 1.17 Det finns andra buffertar som har
namn som börjar och slutar med stjärna. En har
ett namn som börjar med *M. Vad heter den och
vad verkar den användas till?
Terminalen och skalet
Skapa ett terminalfönster genom att föra muspekaren till övre vänstra hörnet och klicka på
symbolen kallad »Terminal« i vänstra kanten.
Även i detta fönster finns det plats för 80 tecken per rad. (Gör gärna även detta fönster högre.) Lägg terminalfönstret och Emacs sida vid sida
Terminalen och skalet
så att båda syns samtidigt, så att du kan fortsätta Uppgift 1.24 Vad gav det för resultat?
skriva in svar i ids1.txt medan du även ser terminalfönstret.
I din kurskatalog finns en fil som heter stp.txt.
Med kommandot
Uppgift 1.18 Exakt hur lyder den prompt du
fått av skalet?
I terminalfönstret ska du skriva in textkommandon. Som första kommando, skriv ls , som
står för list, och tryck på retur.
Med detta kommando får du ut en lista över
vilka filer och kataloger du har i din hemkatalog.
Resultatet skrivs ut i samma terminalfönster som
där du skrev in kommandot.
Man kan ge namnet på en katalog som argument till ls för att lista filerna i den katalogen
istället.
Här kan man använda komplettering med TABtangenten, när det bara finns en möjlig fortsättning. Skriv bara »ls in« och tryck sedan på TAB.
Du bör få fram
$ ls introduktion-till-datateknik/
Tryck på retur för att utföra kommandot. Nu
listar du alltså istället filerna i den katalogen. Ge
sen kommandot
$ cat stp.txt
kan du skriva ut dess innehåll i terminalfönstret.
(Använd TAB för komplettering, även när det inte
är så långa filnamn. Då får du bekräftelse på att
det verkligen finns en fil som heter så.)
Den texten har ganska korta rader. Det finns ett
kommando fmt med vilket man kan formattera
om en text så att den får lagom långa rader. Prova
$ fmt stp.txt
Uppgift 1.25 Vad blev det för output från detta? (Använd klipp-och-klistra!)
Kommandot grep kan du ge två argument.
Först en text och sedan ett filnamn, och kommandot visar då alla rader i filen som innehåller den
texten. Prova med
$ cd introduktion-till-datateknik/
$ grep dator stp.txt
(Använd komplettering igen!) Detta kommando
gav inget resultat. Det är inte alla kommandon
som ger något resultat som skrivs ut på skärmen,
utan en del bara gör något utan att säga något om
det. Detta har ändrat aktuell katalog till din katalog introduktion-till-datateknik, så nu utförs normalt kommandon i den katalogen istället.
Så om du nu ger kommandot ls igen så blir
det filerna i denna katalog som listas.
Uppgift 1.19 Vad är cd förkortning för enligt
detta kompendium?
Uppgift 1.26
Vad gav det för resultat?
Första argumentet till grep, här »arbete«, är ett
exempel på att argument till kommandon kan vara annat än fil- och katalognamn. Men det är bara fil- och katalognamn som du får komplettering
på! (Skalet kunde inte ana att det var just »arbete«
vi ville söka efter.)
Prova härnäst de två kommandona date och
date -u .
Uppgift 1.20 Ge kommandot ls /home för att
lista vad som finns i katalogen /home. Vad gav det
Uppgift 1.27 Hur löd resultaten?
för resultat?
Uppgift 1.28 Det står olika förkortningar i de
Uppgift 1.21 Om du utan att byta aktuell katabåda svaren. Vad betyder dessa? (Sök på nätet om
log nu vill lista innehållet i din hemkatalog, vad
du inte vet!)
kan du ge för kommando då? (Använd en särskild
beteckning för din hemkatalog i svaret.)
Uppgift 1.29 Vilken effekt verkar det där -u
ha?
Uppgift 1.22 Vad gav det för resultat?
Uppgift 1.23 Och om du vill lista innehållet i
Genom att hänga på > och ett filnamn i slutet
Ellens hemkatalog hur gör du då? (Du skulle kun- av ett kommando så kan man spara resultatet i en
na skriva ls /home/stp15/ellen , men använd fil istället för att få ut det i terminalfönstret.
en kortare beteckning för hennes hemkatalog.)
13
INLUPP 1: INLEDNING
Uppgift 1.30 Gör
Uppgift 1.38 När man editerar en fil i Emacs
så sparar den en backupfil med det gamla innehållet för säkerhets skull. Medan du har labbat
Märk att du inte ser någon output alls. Öppna har den därför skapat backupfiler av i alla fall
sedan den nyskapade filen arbete.txt i Emacs. favourite-colour.txt och dodo.txt åt dig. Att
Hur många rader är det i den?
döma av vad du har för filer i den katalogen nu,
hur skapar Emacs namnen på dessa backupfiler?
(Filhanteraren visar normalt inte dessa backupfiUppgift 1.31 Det finns ett kommando seq som ler, så se efter med ls eller genom att öppna kager en sekvens med tal. Använd det kommandot talogen i Emacs istället.)
med argumentet 12 och visa vad du får för resultat då.
(I filhanteraren räknas backuperna som dolda
filer, och det finns ett menyval Show Hidden Files
Om du istället använder argumentet som styr både om dessa och filer med namn som
123456789 (prova!) så har du knappast tid börjar med punkt ska visas.
att vänta på att kommandot ska köra klart. I
sådana lägen kan man avbryta med Control-C,
dvs. genom att trycka in Ctrl och C samtidigt. Efteråt
Gör så!
Ge ett skalkommando som sparar alla tal från 1 Låt kurskatalogen ligga kvar som den är efter labtill 100 i en fil 100.txt i din kurskatalog. (Denna ben så att jag lätt kan kontrollera att ni utfört uppfil ska inte skapas innan du ger kommandot, utan gifterna! Dessutom kommer ni att behöva dessa
du gör i stil med hur arbete.txt skapades ovan.) filer i senare labbar också.
Hela din kurskatalog är skyddad för läsning för
andra, men just i denna katalog kommer jag att
Uppgift 1.32 Hur löd ditt kommando?
titta ändå (med mina administratörsrättigheter).
Jag skickar kommentarer med mail. Läs den reUppgift 1.33 Ge ett kommando som talar om
vilka av raderna i den filen 100.txt som innehål- gelbundet, och om du får frågor som har med
ler (minst) en 8:a. Visa både ditt kommando och inlupparna att göra så svara på dem!
dess resultat.
$ grep dator stp.txt >arbete.txt
Öppna i Emacs en ny fil i din kurskatalog med
namnet ett ord.txt . Skriv ett valfritt ord i den
och spara.
Uppgift 1.34 Vad blir det för resultat om du ger
kommandot cat ett ord.txt för att se innehållet i den filen från skalet?
Uppgift 1.35 Men om man skriver cat ett
och sen trycker på TAB för komplettering, vad
händer då?
Uppgift 1.36 På s. 5 står att man brukar undvika
filnamn med mellanslag i för filer som man ska
hantera med kommandoraden. Hur kommer det
sig?
Diverse på slutet
Uppgift 1.37 Kolla i filhanteraren vad din katalog Desktop har för skydd. Får andra användare se
vad du har för filer och kataloger på ditt skrivbord
eller inte?
(Passa gärna på att ändra om du vill.)
14
Till nästa gång
Titta igenom hela detta kapitel för att se om det
var något Per missade att ta upp idag eller om något är oklart.
Kapitel 2
Skalet och Emacs
2.1
Skalet
2.1.1
Argument
Förra gången provade ni ls, cd, cat, date,
fmt och grep, och ytterligare några kommandon
nämndes i avsnitt 1.9 på s. 9.
Kommandon börjar alltså med ett kommandoord som t. ex. cd, date eller grep och efter det
kan det följa ett eller flera argument (även kallat
operander), åtskilda av mellanslag.
Skalet ger komplettering av sådana argument
som är namn på filer och kataloger med TABtangenten.
Så i ett kommando
$ grep Explain wonderland.txt
'Explain yourself!'
'Explain all that,' said the Mock Turtle.
$ grep 'vanished completely' wonderland.txt
the little door, had vanished completely.
Här är det första argumentet en fras
med två ord. (Det finns visst bara en rad
i wonderland.txt som innehåller texten
»vanished completely«.) Man kan använda
enkla ('vanished completely') eller dubbla
("vanished completely") citattecken. Samma
metod kan användas för argument som är filnamn
när man har filnamn med mellanslag. Ett annat
sätt att hantera argument med mellanslag såg ni
i uppgift 1.35. Ett speciellt tecken skrivs före
varje mellanslag (eller annat tecken som behöver
hanteras särskilt).
2.1.2
Aktuell katalog
I skalet har man hela tiden en aktuell katalog eller
arbetskatalog
(working directory). Om man t. ex.
är kommandoordet grep och det har två arguger
kommandot
ls (utan argument) så listar den
ment. Det första argumentet är Explain och det
filerna
där.
I
exemplet
ovan låg filen wonderland.
andra är wonderland.txt. Detta skriver ut alla
txt
i
ens
aktuella
katalog
(annars hade man fått
rader i filen wonderland.txt som innehåller texett
felmeddelande).
Med
cd
kan man byta vilken
ten »Explain«.
ens
aktuella
katalog
är
och
med
pwd kan man skriEftersom mellanslag skiljer argumenten åt beva
ut
vilken
katalog
som
är
den
aktuella (print
höver man göra något särskilt när mellanslag inworking
directory).
går i argumenten. Ett sätt är att hålla ihop sådana
Om man ger cd utan något argument så går
argument med citattecken.
man till sin hemkatalog. Om man ger cd med det
speciella argumentet .. (två punkter) så går man
upp en katalog, dvs. till aktuell katalogs förälder.
Bourne (Again) Shell: Skalet är ett program det
också. Det ursprungliga skalet i Unix skrevs av en
Steve Bourne på Bell Labs och hette sh (kort för
shell). Senare skrevs en del alternativa skal, och
det ursprungliga skalet kallas ibland för the Bourne
shell för att skilja det från alternativen.
Det skal som är skrivet särskilt för GNU och
som liknar Bourne shell har därför det skämtsamma namnet Bourne Again Shell, vilket förkortas
bash.
2.1.3
Jokrar: * ? []
När man ger filnamn som argument till kommandon behöver man inte alltid ange hela exakta filnamn, utan man kan ofta använda jokrar (wild
cards) i namnet och därmed matcha ett eller flera
filnamn.
Med * matchas godtyckligt antal tecken och
med ? matchas exakt ett godtyckligt tecken.
15
2. SKALET OCH EMACS
Att kombinera väljare
$ ls *.png
bar.png kvack.png
$ ls f?o
foo
$ ls foo*
foo foo.py
$ ls *a*
bar.png kvack.png
När man ska ange flera väljare till samma kommando så är det bara att lista dem allihop efter varann. Oftast kan man kombinera flera korta väljare och skriva bara t. ex. -abc istället för
-a -b -c.
Exemplet med grep -c -i ovan skulle alltså
ha kunnat skrivas grep -ci istället.
Väljare med argument
I det sista fallet listas alla filer som har ett a i
sitt namn. Observera att »godtyckligt antal tecken« kan vara noll tecken, så att foo* matchar
även filnamnet foo utan nånting efter.
Man kan också sätta tecken inom [] för att
matcha något av dessa tecken. Så foo[abcd] matchar en fil som heter fooa, foob, fooc eller food,
men däremot inte en som heter fool. Det går
också att skriva foo[a-d] med samma betydelse.
Med [3-6] matchar man någon av siffrorna 3, 4,
5 eller 6 och [0-9] matchar en godtycklig siffra.
2.1.4
Väljare (options)
Väljare (optioner, flaggor) kan ange hur ett kommando ska utföras. De ges som vanliga argument,
men har namn som börjar med bindestreck (-).
Kommandot grep har t. ex. en väljare -i som
betyder att den inte ska skilja på små och stora
bokstäver, och en annan väljare -c som betyder
att den bara ska tala om hur många rader den hittade.
$ grep fonetik stp.txt
utgångspunkter. Delområden som fonetik,
$ grep -i fonetik stp.txt
utgångspunkter. Delområden som fonetik,
särskilt viktiga. Fonetiken och
uttryckssida. Fonetiken undersöker hur
$ grep -c fonetik stp.txt
1
$ grep -c -i fonetik stp.txt
3
I det sista fallen används båda dessa väljare samtidigt.
Olika kommandon har olika väljare, så dessa
väljare är specifika för kommandot grep. I uppgift 1.29 såg du som exempel att kommandot
date (som talar om vad klockan är), har en väljare -u. Den väljaren är på samma sätt specifik
bara för kommandot date.
Väljaren -l till ls ger en lång fillistning som
tar med inte bara filnamnet, utan även bland annat filens skydd, ägare, storlek och när den senast
ändrades. (Det är ett litet L och inte en siffra 1!)
16
Många väljare är som de ovanstående i att de talar om ifall något ska vara avstängt eller påslaget –
det finns bara två möjligheter. Sådana väljare kallas också för flaggor. Man tänker sig att en flagga
är hissad eller inte hissad. Med en blandning av
metaforer talar man ändå ofta om att slå på och
slå av sådana flaggor.
För andra väljare finns det fler alternativ än bara två, och man ger själva väljaren ett argument
direkt efter väljaren.
Kommandot date har en väljare -d med vilken
man talar om vilken tidpunkt som ska anges istället för den nuvarande. Man kan ange denna tidpunkt i en mängd olika format och date anger
den på samma format som vanligt.
$ date -d 1912-06-23
Sun Jun 23 00:00:00 CET 1912
$ date -d '11:51:31 September 21, 1976'
Tue Sep 21 11:51:31 CET 1976
Observera citattecknen i det sista exemplet för
att »hålla ihop« argumentet till väljaren -d. Utan
dessa skulle det argumentet till väljaren bara bli
»11:51:31« och date skulle få tre ytterligare argument: »September«, »21,« och »1976« som det
inte skulle veta hur det skulle hantera.
2.1.5
När det blir fel
Om man ger ett felaktigt kommando kan man få
ett felmeddelande. Här är ett exempel:
$ ls -y
ls: invalid option -- 'y'
Try 'ls --help' for more information.
Först i dessa meddelanden står alltid vem (vad)
det är som klagar. I detta fall är det »ls« som klagar. (Det är inte så överraskande eftersom det är
kommandot ls vi har kört.)
Efter ett kolon kommer så själva klaget, i detta fall att y var en ogiltig väljare. Det finns ingen
väljare -y till ls.
2.1. Skalet
Här är några till exempel:
cp – Kopiera filer
Kopiera filer görs med kommandot cp som måste
ha minst två argument. Det kan användas på två
$ cp
sätt. Det första är cp SOURCE DEST för att kopicp: missing file operand
era det som har namnet SOURCE till att ha namTry 'cp --help' for more information.
net DEST också, t. ex. cp foo.txt bar.txt .
$ date -d
Här
ska alltså foo.txt vara en fil som redan finns,
date: option requires an argument -- 'd'
medan
bar.txt kommer att skapas av kommanTry 'date --help' for more information.
$ date -d christmas
dot. (Om den redan fanns kommer det gamla indate: invalid date ‘christmas’
nehållet att skrivas över!)
$ cta exempel.txt
Det andra sättet kan ha två eller fler argubash: cta: command not found
ment där det sista argumentet är namnet på en
existerande katalog. Då kommer alla de tidigare argumenten att kopieras till denna katalog
(och kommer att där ha samma namn). Exempel:
Observera i det sista fallet att det är bash självt cp foo.txt bar.txt Desktop . Detta kopierar
(skalet) som rapporterar ett fel. (Här hade använ- två filer som redan finns till ens katalog Desktop.
daren antagligen tänkt skriva cat istället för cta. Efteråt kommer de nya filerna Desktop/foo.txt
Det finns inget kommando som heter cta.) Mär- och Desktop/bar.txt att finnas.
ker man inte vilket program som rapporterar felet
så kan det ofta bidra till att man inte förstår varför
mv – Flytta filer
det blev fel.
Filer flyttas med mv. Det tar emot samma slags
argument som cp, så även det kan användas på
2.1.6 Omdirigering (>)
två olika sätt, och beter sig likadant som cp förNär ett kommando ger ifrån sig output lämnas utom att filerna inte ligger kvar med sina gamden vidare till skalet som normalt skriver ut den i la namn också. I den andra användningen där
terminalfönstret. Man kan dock tala om för skalet det sista argumentet är en katalog så flyttar man
filer från en katalog till en annan. I det försatt det ska spara denna output nån annanstans.
Om man vill spara undan resultatet av ett kom- ta fallet så byter man snarare namn på en fil
mando i en fil så gör man det genom att skri- ( mv foo.txt bar.txt ). Observera alltså att flytva >hfilnamni på slutet av kommandoraden, t. ex. ta filer och att byta namn på filer görs med samma
ls Desktop >fil-lista för att spara en lista kommando!
med filerna i en viss katalog i en ny fil fil-lista.
Här ska man inte tänka på tecknet som större-än, rm – Ta bort filer
utan som en pil. Ni använde detta i uppgift 1.30.
Med rm tar man bort filer. Observera att dessa filer
Det extra påhänget är alltså inte ett till argutas bort helt och hållet. Detta skiljer sig från det
ment till ls. Programmet ls vet här bara om att
grafiska gränssnittets borttagning av filer som lägdet ska utföra ls Desktop , och det är skalet som
ger det man tar bort i en papperskorg som man
sedan gör något annorlunda med den output som
kan rädda tillbaka filer från tills papperskorgen
detta ger ifrån sig.
töms.
Det enskilda programmet man kör, som ls i
detta fall, skriver ut sin output till en lite ospecificerad mottagare som kallas för standard out- mkdir och rmdir – Skapa och ta bort kataloger
put, utan att veta vart detta kommer att hamna,
Med mkdir skapar man en katalog och med rmdir
och med > styr man om vart standard output ska
tar man bort en. Båda dessa kommandon tar ett
hamna. Detta kallas för omdirigering (redirection).
argument. För att man ska kunna ta bort en katalog måste den vara tom.
2.1.7
Filhantering i skalet
2.1.8
Texthantering i skalet
ls – Lista filer
cat – Visa filer
Med ls listar man filer. Argumenten ska vara de
filer och kataloger som man vill lista. Om man inte ger några argument alls så listas aktuell katalog.
Ett par vanliga väljare till ls är -l (lilla L) som
ger en lång listning med mer information och -a
som listar alla filer, inklusive de dolda.
Med cat visar man filers innehåll. Argumenten
ska vara ett antal filnamn och cat skriver ut alla deras innehåll. Om man ger flera argument så
visas alla filerna direkt efter varandra, ihopslagna,
och det är därför kommandot heter »cat« som i
»concatenate«.
17
2. SKALET OCH EMACS
head – Början
Kommandot head fungerar ungefär som cat förutom att det bara tar med de tio första raderna av
varje fil. Med en väljare -n kan man tala om hur
många av de första raderna man vill se (istället för
tio), t. ex.
Dessutom finns det kortkommandon till många
fler kommandon.
2.2.1
Namn på tangenter
I Emacs används korta beteckningar på tangenttryckningar. Om man ska trycka på Ctrl och f
$ head -n 2 foo.txt
samtidigt så betecknas detta inte Ctrl-f utan med
bara C-f. Förutom C- för Control finns även bl. a.
M- för Meta. Där första versionen av Emacs skrevs
hade man nämligen tangentbord med särskilda
för att skriva ut de två första raderna av foo.txt.
Meta-tangenter. Det har inte vi, och då är det Alttangenten som fungerar som Meta-tangent. Både
tail – Slutet
C- och M- betyder att man ska trycka in Ctrl- respektive
Meta-tangenten (Alt) tillsammans med
Kommandot tail är som head förutom att det
det
tecken
som följer.
skriver ut slutet istället för början. Även till det
De kan kombineras också, så C-M-/ betyder
kan man ge en väljare -n.
Ctrl och Alt tillsammans med /. (Och eftersom
snedstrecket i sin tur kräver skifttangenten blir
grep – Sök
det totalt fyra tangenter nedtryckta samtidigt!)
Kommandot grep söker efter en text (dess första
En del andra tangenter har speciella trebokargument) i ett antal filer (alla ytterligare argu- stavsbeteckningar som t. ex. SPC för mellanslag.
ment) och skriver ut alla rader i de filerna som Andra har (ofta längre) beteckningar inom <>.
innehåller den texten.
Några sådana namn visas i tabell 2.1. Observera
Vi kommer senare att se hur man kan göra mer att de inte alltid är identiska med vad som faktiskt
avancerade textsökningar med grep.
står på våra tangentbord, i synnerhet att DEL inte
är den tangent som det står »Delete« på, utan vanliga tangenten för att sudda ett tecken. (Den kalwc – Räkna
las också för <backspace>.) Även dessa kan komwc står för »word count« och kan användas till att bineras med C- och M-, så om det står att man ska
räkna antal ord i en fil, men det kan också räk- trycka t. ex. C-SPC så betyder det alltså Controlna annat. Det finns väljare som anger vad det ska tillsammans-med-mellanslag och <M-left> betyräkna, som -w för ord och -l för rader.
der Alt-tillsammans-med-vänsterpil.
Dessa namn på tangenterna används bland annat
till höger i menyerna, där man kan se hur man
$ wc -w stp.txt
kan ge samma kommandon från tangentbordet.
238 stp.txt
$ wc
1
56
57
-l s*.txt
secret.txt
stp.txt
total
Så här tog vi först reda på att stp.txt innehåller 238 ord och sedan hur många rader det finns i
en mängd filer, med användning av joker.
fmt – Formattera
Kommandot fmt för att formattera om en text
träffade vi på förra gången. Det finns en väljare -w
som man kan ge ett argument som anger hur breda raderna får bli.
2.2
Emacs
Man kan göra saker med texten på flera olika sätt i
Emacs. I de förra uppgifterna fick ni dels använda
knapparna under menyerna, dels menyerna.
18
2.2.2
Tangentsekvenser
Kortkommandon kan vara flera steg långa. För att
öppna en fil kan man t. ex. använda C-x C-f , dvs.
först C-x och sen C-f .
Bara C-x ensamt gör ingenting, utan det väntar
bara in en fortsättning. Det finns flera sådana prefixtangenter som inleder sekvenser av flera tryckningar, och C-x är en av de vanligaste.
Emacs: Den första editorn med namnet Emacs
skrevs redan på 1970-talet av Richard M. Stallman
på MIT (Massachusetts Institute of Technology).
Den nuvarande, GNU Emacs, är skriven särskilt för GNU, och påbörjades av samme Stallman
1984, som ett av de första GNU-programmen. Sedan dess har den kommit många versioner. Den
nuvarande, version 24.5, släpptes i april 2015.
2.2. Emacs
Tabell 2.1: Beteckningar på några tangenter i Emacs.
Beteckning
Beskrivning
CMDEL
ESC
RET
SPC
TAB
<left>
<right>
<up>
<down>
<prior>
<next>
<f1>
<f2>
<kp-1>
<kp-2>
Control. CtrlMeta. Alt- (hos oss)
Suddtangenten
Esc = Escape
Returtangenten
Mellanslag (SPaCe)
Tab-tangenten
vänsterpil
högerpil
uppåtpil
neråtpil
Page Up
Page Down
F1 (i översta raden)
F2 (och så vidare)
1 på numeriska tangentbordet
osv (kp = keypad)
Figur 2.1: En Emacs med två stora fönster som visar
varsin buffert samt en aktiv minibuffert.
2.2.5
Informationsrad, minibuffert,
ekoarea
Den mörkare raden under buffertens innehåll kallas mode line eller informationsrad. Den innehåller
en mängd information om den bufferten, bland
I samma Emacs kan man editera flera olika filer.
annat vad den heter och vilken mode (vilket läge,
Dessa visas då i varsin buffert (buffer på engelsvilken arbetsmiljö) Emacs befinner sig i.
ka) och man kan växla mellan olika buffertar och
Ibland får man i Emacs skriva in filnamn och
även visa flera buffertar samtidigt. Alla buffertar
annat i den särskilda minibufferten längst ner i
motsvarar inte en fil, utan det kan också vara en
Emacs. Den har till skillnad från andra buffertar
text som bara finns inne i Emacs. Så är det med
ingen informationsrad. Om man ger C-x C-f för
den särskilda slaskbufferten *scratch*. Använd
att öppna en fil är det till exempel där man får
inte den för något som du har tänkt spara, utan
skriva in namnet på den fil man vill öppna.
öppna en ny fil för sånt!
På samma ställe, längst ner, skrivs även diverEtt sätt att byta buffert är att använda menyn se meddelanden från Emacs ut. Detta kallas då
Buffers . Ett annat är med C-x b .
för ekoarean. Dessa meddelanden sparas även i en
särskild buffert *Messages*.
2.2.3
Buffertar
2.2.4
Fönster, ramar
Vid övningen med stavningskontroll förra veckan visades ersättningsförslag i en egen ruta i
Emacs. Sådana »rutor« kallas för fönster (windows)
i Emacs.
I figur 2.1 finns ett annat exempel på där Emacs
visar två buffertar samtidigt i varsitt fönster.
Med C-x 1 tar man bort alla andra fönster än
det man just då är i och med C-x 2 klyver man
aktuellt fönster till två. Med C-x o byter man
fönster.
Terminologin kan vara förvirrande eftersom allt
detta tillsammans är bara ett fönster i fönstersystemet. Det går även att låta samma Emacs använda
sig av flera fönster i fönstersystemet. Dessa kallas
då ramar (frames) i Emacs. Som det är uppsatt
här kommer ni få en ny ram varje gång ni väljer
att editera en fil i filhanteraren.
2.2.6
Att förflytta sig
I början är det oftast enklast att använda piltangenterna för att förflytta sig i texten. Tillsammans
med Control eller Meta går de hela ord eller stycken i taget. För att förflytta en sida i taget kan man
använda <prior> och <next> (Page Up och Page
Down).
Vana användbara brukar föredra att använda en
del kommandon i tabell 2.2 eftersom de tangenterna ligger närmare till hands medan man skriver
text.
2.2.7
Bryta och ångra
Med ångerknappen
kan man ångra inte bara
det allra senaste man gjorde, utan man kan ångra
sig långt tillbaks i tiden om man kommer på att
man gjort hel fel. Det är bara att göra det om och
19
2. SKALET OCH EMACS
Tabell 2.2: En del kommandon för förflyttning
C-f
C-b
C-p
C-n
framåt ett tecken (forward)
bakåt ett tecken (backward)
upp en rad (up)
ner en rad (down)
M-f
M-b
framåt ett ord
bakåt ett ord
C-v
M-v
framåt en sida
bakåt en sida
C-a
C-e
till början av raden
till slutet av raden
M-<
M->
till början av bufferten
till slutet av bufferten
om igen i en buffert tills man har tagit tillbaka allt
som blev fel där.
Det är ett av de kommandon som man har
störst nytta av att kunna kortkommandot för så
att man snabbt kan rätta till skrivfel medan man
fortfarande har fingrarna kvar på tangentbordet.
Kortkommandot är C-_ dvs. Ctrl tillsammans
med understreck. (Eftersom understreck kräver
skift så blir det totalt tre tangenter som trycks ner
samtidigt.)
Ett påbörjat kommando kan avbrytas med C-g.
Om man t. ex. har tryckt C-x C-f för att öppna
en fil men sen har ångrat sig kan man trycka på
C-g istället för att ge ett filnamn. Man kan också
trycka C-g efter ett halvskrivet kommando, t. ex.
om man bara hann skriva C-x innan man ångrade
sig. Man kan också använda det för att avbryta
Emacs om den tar lång tid på sig att slutföra något
komplicerat kommando.
Om man har hamnat i nån konstig situation i
Emacs som man inte vet hur man ska ta sig ur
kan man använda ESC ESC ESC för att ta sig ur.
(Tre ESC efter varann.) Exakt vad det gör beror på
vad man håller på med i Emacs.
2.2.8
Backuper
När man har ändrat i en fil så sparar Emacs den
gamla versionen i en backupfil som får ett namn
som slutar med tilde (~), t. ex. exempel.txt~
eller README~. (Filhanteraren visar normalt inte
dessa filer.)
Emacs sparar också filer som har namn som
börjar och slutar med tecknet # (ofta kallat nummertecken). Detta är autosparfiler som sparas då
och då medan man editerar en fil och sedan tas
bort när man har sparat filen. Det ger ett sätt att
få tillbaka det man gjort om t. ex. det blir strömavbrott innan man har sparat sina ändringar.
20
2.2.9
Klipp-och-klistra
Emacs kommer från en annan tradition än program ni förmodligen är vana vid och har sina egna
tangenter för sådant. (Det går dock att ställa om,
och i labben ska vi se hur.)
• C-w cut, klippa ut
• M-w copy, kopiera
• C-y paste, klistra in (y = yank)
Det finns även andra kommandon för att ta
bort text, t. ex. för att ta bort rader (C-k ) eller ord (M-d framåt, M-DEL bakåt). Dessa kommandon har namn som börjar med kill (t. ex.
kill-region för C-w). All text som man »dödar«
med sådana kommandon hamnar i urklipp så att
de kan klistras in.
Emacs sparar många gamla texter som man
»dödat«. I en meny Edit Paste from Kill Menu finns
flera såna gamla urklipp att välja från. Från tangentbordet börjar man med C-y och trycker sen
omedelbart efter M-y vilket byter ut den inklistrade texten mot nåt man dödade tidigare. Om det
fortfarande är fel repeterar man M-y tills man fått
fram den text man ville ha.
2.2.10
Punkten och regionen
Glöm inte snabbsättet att kopiera text i Unix som
vi tog upp förra gången! Man bara markerar en
text och klistrar sen in den med mittknappen.
Den markerade texten kallas i Emacs även regionen, och det finns flera kommandon som gör
saker med denna region.
I ena änden av regionen finns alltid punkten
(point), som i Emacs är namnet på det ställe där
den blinkande markören befinner sig. I den andra
änden finns ett så kallat märke. Ett sätt att markera text utan att använda musen är genom att sätta
ett märke där man är med C-SPC och sen flytta
sig en bit.
Inlupp 2: Skalet och Emacs
Redovisning
Skriv svaren i en textfil i Emacs och skicka den till
starback@stp.lingfil.uu.se. Om det är något
du inte klarar, så skicka ändå det du har!
Se till att du har utfört de övriga uppgifter som
står mellan frågorna när du skickar in svaren, för
jag kommer att titta på det också.
$ cat dikt-1.txt
osv. för de andra filerna. Med
$ cat dikt-1.txt dikt-2.txt dikt-3.txt
Skalet
Skapa ett terminalfönster med ett skal.
Väljaren -a till ls talar om att alla filer ska listas
(även dolda). Jämför vad du får för resultat från
ls och ls -a.
Uppgift 2.1 Nämn någon dold fil och någon
dold underkatalog som du har i din hemkatalog.
får du hopslagningen av dessa tre som output, dvs.
hela denna dikt.
Uppgift 2.5 Hur kan man skriva något annat än
cat dikt-1.txt dikt-2.txt dikt-3.txt som
ger samma resultat men är kortare, med användning av joker?
Uppgift 2.2 Ge ett kommando för att få en lång
I katalogen finns också en fil dikt-source som
listning av filerna i din kurskatalog. Ange kom- talar om vad det är för dikt. Den har av någon
mandot och det svar det gav! (Använd klipp-och- anledning inte ett namn som slutar på ».txt« trots
klistra.)
att det är en textfil. Se till att den inte kommer
med när du ger ditt kommando.
Den listningen liknar en del fillistningar från
förra labben och visar bland annat filskyddet, vem Uppgift 2.6 Ange ett kommando där du med
som äger filen, hur stor den är och när den senast hjälp av omdirigering sparar hela denna dikt i en
ändrades.
ny fil med namnet hela-dikten.txt. Utför även
det kommandot.
Uppgift 2.3 Ge ett kommando för att ändra så
Gör cat hela-dikten.txt efteråt för att se
att introduktion-till-datateknik blir din akatt du fått önskat resultat.
tuella katalog. Hur lyder det kommandot?
Med denna nya fil har du totalt fem filer som
Uppgift 2.4 Lista bara alla filer här som har
har med denna dikt att göra. Fundera ut vad du
namn som slutar på ».txt«? Ange både ditt komkan skriva för ett uttryck med jokrar som matchar
mando och det resultat det gav.
alla fem filerna.
Där finns bland annat tre filer dikt-1.txt, Uppgift 2.7 Ge ett kommando med ls och ditt
dikt-2.txt och dikt-3.txt som innehåller var- jokeruttryck. Resultatet ska bli en listning med alsin strof i en dikt. Titta på innehållet i dessa med la de fem filerna och inga andra.
cat, som
Får du ingen ny prompt som slutar med dollar?:
Du kan råka skriva fel på något kommando i skalet
så att du inte får en ny prompt eller får en prompt
som slutar med > istället för $. Avbryt i så fall med
Ctrl-C för att få en ny prompt.
Skapa en ny underkatalog lenngren till din
kurskatalog med kommandot mkdir lenngren
och flytta alla de fem diktrelaterade filerna till den
nya katalogen lenngren i ett kommando (med
jokrar). Att flytta filer kan man göra med kommandot mv (»move«) med ett antal filnamn som
argument och där det sista argumentet är en katalog som filerna ska flyttas till.
21
INLUPP 2: SKALET OCH EMACS
Snabbkommandot C-x C-f för att öppna filer
använder man oavsett om man öppnar en fil som
Uppgift 2.9 Vad kan du ge för kommando (ut- redan finns eller om man vill skapa en ny fil. Man
an att byta katalog) för att få en lång listning av behöver alltså inte först skapa en ny fil som man
filerna i denna katalog?
sen öppnar, utan man öppnar den direkt. Öppna
med C-x C-f en ny fil saga.txt i kurskatalogen.
Kommandot echo är ett enkelt kommando som Eftersom den fil du just tittar på ligger i den kataman kan ge godtyckligt många argument och som logen kommer den nya filen också hamna där om
ekar tillbaka sina argument ett och ett. (Det kan du inte säger till om nåt annat.
nog verka svårt att förstå vad man ska ha det till,
När man editerar vanlig text är det oftast
men det kommer att visa sig användbart så små- praktiskt om långa rader bryts automatiskt meningom.)
dan man skriver. Ställ om så att det blir så
Jämför output från följande kommandon:
med Options Auto Fill in Text Modes i Emacsmenyerna. När du har det påslaget visas det med or1. echo Hej hopp
det Fill i informationsraden. Gör även Options
2. echo "Hej hopp"
Save Options vilket sparar denna inställning till
3. echo Hej
hopp
4. echo "Hej
hopp"
nästa gång du kör Emacs!
Skriv en liten saga i den filen. Den ska börja
(I de två senare fallen har jag skrivit sjutton
mellanslag i rad mellan orden, men du kan nåt »Det var en gång« för annars är det ingen riktig
annat antal i samma storleksordning när du tes- saga. Tryck inte på retur/enter utan skriv på för att
se hur den automatiska radbrytningen fungerar.
tar.)
Så snart du börjar skriva dyker det upp ett par
Uppgift 2.10 Vilka av dessa kommandon ger stjärnor till vänster på informationsraden. De visamma output? Förklara varför, och varför det sar att bufferten inte är sparad. Det märks även
som avviker gör det! Frivillig bonusfråga: Om på att knappen Save blir aktiv. Glöm inte att spaman verkligen vill skriva ut "Hej hopp" inklusi- ra efteråt och notera att stjärnorna då försvinner
ve citattecknen med hjälp av echo, hur ska man och Save-knappen blir inaktiv. Se efter i menyn
vad kortkommandot för Save är.
skriva då?
Uppgift 2.8 Hur löd detta kommando?
Uppgift 2.11 Vad är kortkommandot för Save?
Emacs
Starta Emacs med Applications Accessories Emacs
om du inte redan har en igång.
Denna gång ska du inte använda musen utan
kortkommandot C-x C-f för att öppna en fil i
kurskatalogen. (Eftersom Ctrl-tangenten ska användas till båda tecknen behöver du inte lyfta den
tangenten emellan.)
När du tryckt C-x C-f står det Find file: ~/
längst ner i Emacs och markören har hamnat där nere, i minibufferten. Den fil du ska
öppna är ~/introduktion-till-datateknik/
exempel.txt, så fortsätt att skriva på det påbörjade filnamn som står där (nästa tecken i
namnet är i). Använd komplettering med TABtangenten. Avsluta med returtangenten.
Observera att det i den mörkare nedre raden i
Emacs nu står (Text) vilket visar att Emacs är inställd på att editera vanlig text på t. ex. engelska
eller svenska (och inte t. ex. HTML eller ett Javaprogram) – Emacs befinner sig i text mode. Emacs
befinner sig alltid i en viss sådan mode. På svenska
kallas det ibland för läge (textläge), eller arbetsmiljö.
Att Emacs valde textläge för denna fil är för att
den har ett namn som slutar på ».txt«.
Den mörkare raden i Emacs där bland annat
detta står kallas för mode line eller informationsraden.
22
Skriv verkligen en liten text på minst fyra rader
som inte bara lyder »bla bla bla« eller liknande, för
vi kommer att använda den texten i flera senare
övningar där det inte kommer att funka om det
inte står en riktig text på svenska där.
Uppgift 2.12 Vilka olika sätt att öppna filer i
Emacs känner du till nu?
Inkrementell sökning
Använd C-x C-f i Emacs för att öppna /local/
kurs/ids/wonderland.txt. Eftersom denna fil
inte ligger bland dina filer utan på ett helt annat
ställe så får du skriva hela filnamnet från början
(men du kan förstås använda komplettering med
TAB på lämpliga ställen).
Detta är hela texten till boken Alice i Underlandet. Nu ska du söka i den.
Emacs var först med inkrementell sökning som
har blivit allt vanligare även i andra sammanhang.
Istället för att skriva in hela texten man söker efter innan sökningen sätter igång, så börjar sökningen direkt när man börjar skriva vad man söker
efter. Gör dessa små övningar långsamt så att du
ser vad som händer hela tiden.
Tryck på C-s för att starta en sökning. Då dyker
texten »I-search:« upp i minibufferten därnere för
att visa att en sökning pågår.
Emacs
Säg att du ska söka efter ordet »waistcoat«. Börja med att trycka w (inget mer, tillsvidare). Notera
var markören har hamnat och vilken text som färgas. Tryck så a och se hur det förändras. Härnäst i.
Nu är du framme. Avsluta då sökningen med RET
(retur). Med inkrementell sökning behöver du inte skriva mer än nödvändigt för att hitta texten.
Det funkar att sudda medan man skriver
söktexten. Pröva härnäst att söka efter det ordet
»received«, men »råka« först skriva fel och sök efter »recieved« istället. Den sökningen kommer en
bit in att misslyckas. Emacs misslyckas och visar
den del som inte gick att hitta med rödfärg.
Sudda då i söksträngen och rätta till det till
den riktiga stavningen. Den söksträng du använder står hela tiden i minibufferten. När du är
framme så tryck på RET .
Uppgift 2.13 Vilket ord hade Emacs hittat när
sökningen inte längre gick?
På vilken rad hittade du sen det rätta ordet?
(Radnumret står efter »L« i informationsraden.)
det från menyn så får man upp en särskild filväljare men använder man ett kortkommando får man
ange filnamn i minibufferten. Använd kortkommandot!
Du får upp »Write file:« i minibufferten och
får skriva filnamn där. Du ska spara denna fil
i din kurskatalog och den har du redan använt tidigare i Emacs, så då behöver du inte skriva så mycket. Tryck på <up> (dvs. uppåtpilen) för att gå tillbaka till tidigare använda filnamn. När du har hittat rätt så editera
så att bara namnet på katalogen står, dvs. ~/
introduktion-till-datateknik/ och tryck på
retur. Du ska få ett meddelande (i ekoarean) om
att filen har sparats där.
I början står <!--page--> vilket tydligen markerar var det har varit ny sida i den ursprungliga
tidningen. I detta fall vill du att det istället ska stå
»[ny sida]« där. Kommandot för att byta ut text
finns i menyerna som Edit Replace Replace String. . .
Uppgift 2.17 Hur kan man ge samma kommando från tangentbordet?
Sök härnäst framåt efter »sister«. Du kommer
till ett ställe där det står »in the lap of her sister«.
Antag att detta inte är det ställe du var ute efter.
Tryck på C-s igen för att gå till nästa ställe. Fortsätt så tills du får »Failing I-search«. Då är du vid
den sista förekomsten av »sister« i filen.
Ge kommandot! Du får i minibufferten först
ange vad du vill byta ut, och sen vad du vill byta
ut det mot. Avsluta varje input med RET.
Nu har du börjat byta ut. Den första texten
som kanske ska bytas ut är färgmarkerad. Tryck
y (= yes) för att byta ut denna förekomst och du
hamnar
vid nästa förekomst. Det finns annat än y
Uppgift 2.14 Vilken rad är du då på?
och n som man kan svara här. Tryck på ? för att
Uppgift 2.15 Tryck nu på C-s en gång till i alla få hjälp.
fall, fast du redan var vid sista förekomsten. Vilken rad hamnar du då på? Vad hände?
Uppgift 2.18 Med vilket tecken kan man ersätta
alla återstående förekomster utan ytterligare fråSökningar bakåt görs precis som framåt, men gor?
med C-r istället. (Man kan byta riktning under
sökandet genom att trycka C-r eller C-s .) En påUtför det kommandot! I ekoarean får du ett
börjad sökning kan avbrytas med C-g. Om man
meddelande om hur många utbyten som skedde.
avslutar den (med RET) stannar man vid det man
Använd M-< eller <C-home> för att gå tillbaks
hittade. Om man avbryter (med C-g ) går man
till början av bufferten igen. Den första notisen
istället tillbaks där man var när man började, som
börjar »Bättre ekonomi men fortsatt hög arbetsom man aldrig gjort sökningen.
löshet.« Antag att den av någon anledning inte
ska vara med. Sätt ett märke där den börjar (med
C-SPC). Flytta dig till dess slut och tryck C-w för
Flytta och kopiera
att ta bort regionen. Avsluta med att rensa bort
Nästa fil du ska öppna i Emacs är /local/kurs/ tomraderna i början av filen så att den börjar diids/ivt2-svenska.txt. (Det är en textfil med rekt med den nu första notisen (utan beteckningen del gamla utdrag ur Invandrartidningen på en- en »[ny sida]«).
kel svenska.)
Sök framåt efter ordet »internet«. (När du söker
framåt hittar du före det ett sammansatt ord –
Uppgift 2.16 Det finns ett menyalternativ File
tryck då på C-s igen för att gå till nästa förekomst
Save As. . . i Emacs. Vad är motsvarande kortkom- av det sökta.)
mando?
Hela detta stycke där ordet »internet« står med
ska flyttas till slutet av filen. Prova denna gång
Som för andra operationer med filer så beter sig istället kommandot M-h som direkt markerar heEmacs olika om man väljer kommandot från me- la stycket med punkten i början av stycket. Ta
nyn eller med ett kortkommando. Om man väljer bort det med C-w. Gå till slutet av bufferten med
23
INLUPP 2: SKALET OCH EMACS
M-> eller <C-end> och klistra in stycket med C-y
(yank).
Avsluta med att spara den ändrade filen.
Andra tangenter
Om du är van vid att använda C-x, C-c och C-v
för klipp-och-klistra så kan du ändra så att Emacs
också känner igen dessa.
Uppgift 2.19 Det finns ett menyalternativ för
att välja detta. Vad heter det?
Eftersom dessa tangenter även har andra betydelser i Emacs så får dessa tangenter olika betydelse när man har markerat en region och annars.
Uppgift 2.20 Ja just ja, jag känner till att minst
en av dessa tangenter används till annat i Emacs.
Vad?
Väljaren -d till date beskrevs på s. 16.
Uppgift 2.27 Prova olika argument till denna
väljare -d, nämligen »today«, »tomorrow«, »next
year«. Visa dina kommandon och vad du får för
resultat!
I det sista fallet har du ett argument med mellanslag i sig, så då behöver du ta hand om det på
nåt särskilt sätt.
Uppgift 2.28 Om man ger date -d ett fyrsiffrigt tal som argument, hur tolkar den det?
Uppgift 2.29 Ange ett skalkommando som skapar en fil saga40.txt som innehåller en version
av din saga.txt där raderna är högst 40 tecken
långa.
Uppgift 2.30 Ange ett skalkommando som räknar hur många rader och ord det är i denna nya
(Om man gör denna omställning får man även fil och vad det gav för resultat. Det ska bli lika
ångra på C-z, som man kanske också är van vid många ord som för saga.txt, men troligen fler
från annat håll. Om du vill spara inställningen så rader.
välj Options Save Options .) Välj själv om du vill an- Uppgift 2.31 När man räknar både ord och ravända detta eller prova att använda standardtan- der samtidigt, i vilken ordning får man då ut svagenterna i Emacs.
ren? Spelar det roll i vilken ordning man ger väljarna?
Diverse
I ekoarean kommer det då och då små meddelanden från Emacs, t. ex. om att den sparar filer osv.
Uppgift 2.32 Ge nu ett kommando för att gå
tillbaks till din hemkatalog igen. Ange minst två
sätt som du kan göra detta på!
Uppgift 2.33 Nämn minst tre tangentsekvenser
Uppgift 2.21 Om du ger C-x C-f för att öppna
i Emacs med en prefixtangent, och vilka komen fil igen, men ångrar dig och trycker på C-g , vad
mandon som dessa utför.
får du då för meddelande i ekoarean?
Klyv fönstret med C-x 2 många gånger tills det
inte går längre. Du har fått ett felmeddelande.
Uppgift 2.22 Hur lyder det? (Det skrivs i ekoarean så därför finns det även sparat i bufferten
*Messages* så kopiera det därifrån så att du slipper skriva av.)
(Återställ sen till bara ett fönster med C-x 1.)
Slutkompott
Tillbaks till skalet. Gå till kurskatalogen igen om
du inte redan är där. Ange kommando och kommandots resultat för att:
Uppgift 2.23 . . . visa de två sista raderna i din
saga.txt.
Uppgift 2.24 . . . räkna orden i din saga.txt.
Uppgift 2.25 . . . räkna raderna i din saga.txt.
Uppgift 2.26 . . . räkna både orden och raderna
samtidigt i din saga.txt, med ett kommando.
24
I Unix-världen brukar man rekommendera folk
att inte ha filer vars namn börjar med bindestreck (-). Skapa trots detta en fil som heter -foo.
Uppgift 2.34 Kan du komma på varför man
brukar avreda från sådana namn? Visa något kommando du försöker använda med din fil -foo som
leder till problem.
Uppgift 2.35 Vad är det nu igen för tangent som
används för att avbryta ett kommando i skalet?
Uppgift 2.36 Vad är det nu igen för tangenter som används för att avbryta ett kommando i
Emacs?
Uppgift 2.37 Om det skulle finnas ett kommando xyzzy, hur skulle då xyzzy -x 17 42 tolkas?
a) Kommandot xyzzy har en väljare -x. Sen
har kommandot två argument, 17 och 42.
b) Kommandot xyzzy har en väljare -x med argumentet 17. Sen har kommandot självt ett
argument, 42.
Kapitel 3
Mer om skalet
3.1
Långa väljare
i ett rör vidare till nästa kommando. På svenska
säger man ibland kommandorör.
Förra gången såg vi att kommandon kan få väljare.
Med
I ett kommando som grep -i prins saga.txt
är t. ex. -i en väljare som påverkar beteendet för
$ head stp.txt | wc -w
kommandot grep. Många program har även långa
41
väljare som består av mer än ett tecken (efter bindestreck). I GNU är standarden att långa väljare
inleds med två bindestreck. Ofta finns det en kort
och en lång väljare med samma betydelse. Den
långa är kanske lättare att förstå, men den korta får man t. ex. veta hur många ord det finns i de
går snabbare att skriva när man har lärt sig den. tio första raderna av filen stp.txt. Först utförs
T. ex. kan man till grep skriva --ignore-case head stp.txt, men istället för att skriva ut resultatet av det kommandot till terminalen så skicistället för -i och --count istället för -c.
Man behöver inte alltid skriva ut hela nam- kar skalet vidare det som indata till wc -w som
net på den långa väljaren, utan början kan räcka räknar orden i det.
De båda programmen head och wc vet inte om
ifall det det ändå blir unikt. Det räcker t. ex. med
att
de kommunicerar med varandra. Det första
grep --cou, men inte med grep --co eftersom
skriver
utdata till standard output och det andra
grep också har andra väljare som börjar så.
läser indata från standard input utan att veta vad
som finns i andra änden. Det är skalet som tar ut3.1.1 Argument till långa väljare
data från det ena och lämnar vidare som indata
När en lång väljare ska ha ett argument skriver till det andra.
Om vi inte kände till kommandorör skulle vi
man ofta ett likhetstecken mellan väljare och värkunna
lösa samma uppgift så här:
de, så här:
$ date
Tue Sep 8 13:23:11 CEST 2015
$ date --date=tomorrow
Wed Sep 9 13:23:14 CEST 2015
$ head stp.txt >smurf
$ wc -w smurf
41 smurf
$ rm smurf
Jaha, 41 ord. Här sparar vi undan resultatet av
första steget i en fil (som här fick heta smurf, men
det är ju ett jättedumt namn och du skulle förstås
3.2 Kommandorör (|)
ha kallat den nåt rimligare). När vi väl har räknat
Ni har sett hur man kan spara resultatet av ett orden i den filen så behövs den inte längre, så vi
kommando i en fil med hjälp av tecknet > och ett tog bort den efteråt med rm.
filnamn.
Kommandorör är bättre genom att mellanresulIstället för att spara resultatet i en fil kan man tat inte behöver sparas i några filer utan kan skicockså skicka vidare resultatet som indata till ett kas direkt från kommando till kommando.
nytt kommando med tecknet | (lodstreck).
Observera att wc i kommandoröret inte har
Detta kallas på engelska för en pipe. Man tänker några argument! (Bara en väljare -w.) Alltid tidisig att utdata från det första kommandot färdas gare har vi använt det kommandot med filnamn
25
3. MER OM SKALET
head stp.txt
⇒
Språkteknologiprogrammet förenar
språkvetenskapens sätt att se på språk
med datateknikens mer ingenjörsmässiga
perspektiv. Målet är att på ett
användbart sätt åstadkomma automatisk
analys och generering av naturligt
språk. Exempel på tillämpningar är
system för maskinöversättning och
datoriserade översättningsstöd,
språkgranskning, informationssökning och
⇒
wc -w
⇒
41
Figur 3.1: Hur många ord finns det på de första tio raderna? Kommandoröret head stp.txt | wc -w
som argument, och då räknar den ord eller rader i
de filerna. Om den inte får några argument räknar
den istället i standard input.
I figur 3.1 visas hur utdata skickas vidare som
indata i detta kommandorör.
Ett vanligt fel är att blanda ihop detta och skriva nåt i stil med
FEL! ⇒
$ head stp.txt | wc -w stp.txt
Här har man gett ett argument till wc (nämligen
»stp.txt«), så alltså läser den från den filen och
inte från standard input. Så allt det som står före
lodstrecket spelar ingen roll.
$ echo och/eller | wc -w
1
3.4
Omdirigering av standard input
(<)
Som en omvändning till > kan man använda <
för att visa varifrån indata till ett kommando ska
hämtas. Exempel:
$ wc -w <start
41
Här hämtar skalet texten i filen start och lämnar den texten som indata till wc -w som tar fram
antal ord i detta.
Kommandorör är ett sådant fall där kommandot
Detta är inte alls lika vanligt att man använder
echo kan vara användbart, för att ge en viss speci- som >. Det går ju nämligen lika bra att skriva bafik indata till ett kommando. Antag att vi vill prö- ra wc -w start istället, utan <-tecknet, eftersom
va hur wc egentligen räknar ord. Skulle den räkna wc liksom de flesta kommandon som man vill ge
»och/eller« som ett eller två ord? Ett sätt skulle text som indata till också accepterar filnamn som
förstås vara att skriva texten »och/eller« i en fil argument och då själv läser in dessa filer som införst, men vi behöver inte göra det, utan kan ge data.
en bestämd text direkt som indata.
Precis som det normala för standard output om
man inte säger något är att det skickas till terminalen så är det normala för standard input att om
man inte säger något så läses det från terminalen!
Så om man skriver bara head får man ingen ny
prompt direkt, utan skalet börjar läsa in textrader
Tecknet |: Tecknet | kallas för lodstreck (vertical
som man skriver in på terminalen.1
bar). Det skiljs egentligen från ett ovanligare tecStandard output och standard input förkortas
ken broken bar (¦), men på bland annat svenska
ibland
till stdout respektive stdin.
tangentbord finns bara det ena, och det brukar då
Flera
kommandon som vi sett tidigare som tar
visas som ¦ på tangentbordet trots att tangenten
filnamn som argument och som läser sin input
faktiskt genererar |.
från dessa läser input från standard input istället
Tecknet behöver skrivas med AltGr.
Förutom dess användning som pipe i Unix anom de inte får några argument. Det gäller bl. a.
vänds tecknet också bland annat ofta för att ange
head, tail, wc och grep.
3.3
En användning av echo
alternativ i flera syntaxer och programspråk.
1 Sådan text som man skriver in kan man avsluta med
Control-d.
26
3.5. Långa rör och filter
3.5
Långa rör och filter
En kommandorad kan innehålla godtyckligt
många rör. I en fyrdelad kommandorad som
aaa | bbb | ccc | ddd kommer programmet
aaa att lämna vidare sitt resultat till programmet
bbb som lämnar vidare sitt resultat till programmet ccc som lämnar vidare sitt resultat till programmet ddd . I detta exempel är det bara output
från ddd som hamnar i terminalen.
Till detta kan man även lägga till omdirigering med < och >. Med en kommandorad som
aaa <infil | bbb | ccc | ddd >utfil läser
det första steget aaa sin indata från filen infil
och det sista steget ddd skriver slutliga utdata till
filen utfil. Det är inte meningsfullt att skjuta in
< eller > någonstans i mitten av en sånt här kommandorör. Symbolen | visar ju redan varifrån indata ska tas och vart utdata ska skickas.2
Ett kommando som läser in något från standard
input, gör nånting med det, och sedan skriver ut
det i modifierad form på standard output kallas
ofta ett filter.
3.6
Relativa sökvägar
I avsnitt 1.3 såg vi hur fullständiga sökvägar kan
användas för att beteckna en fil eller katalog. Sådana sökvägar kan alltid skrivas som argument
till kommandon som ska ha filnamn eller katalognamn som argument. De fullständiga sökvägarna
börjar alltid med / och har oftast flera / i namnet.
Oftast anger man istället ett kortare namn på
filer och kataloger. Det enklaste fallet är när
dessa filer och kataloger ligger i det som är
ens aktuella katalog. Då räcker det med att bara skriva namnet, som README eller kvack.png.
Men om Ellen som exempel har sin hemkatalog /home/stp15/ellen som aktuell katalog
och vill referera till sin fil med ett slottsfotografi (se figur 1.3 på s. 6) vars fullständiga namn
är /home/stp15/ellen/fotografier/slottet.
jpg så räcker det inte med bara slottet.jpg eftersom den filen inte ligger i samma katalog. Ett
sätt är förstås att först byta katalog, men ett annat är att skriva en relativ sökväg som utgår från
ens aktuella katalog. Det skulle i det fallet bli
fotografier/slottet.jpg.
Om man istället har /home/stp15 som aktuell katalog kan man skriva ellen/fotografier/
slottet.jpg. Alla sådana namn som inte börjar
med / (eller ~) utgår från aktuell katalog. Det gäller alltså även den enklaste formen helt utan /,
som README och kvack.png. Vad dessa sökvägar
betyder beror på vad som är aktuell katalog, så
detta är exempel på relativa sökvägar.
För att röra sig uppåt i filträdet använder man
den särskilda beteckningen ’..’ som finns i varje
katalog och pekar till den katalogens föräldrakatalog. Om Ellen har sin underkatalog Desktop som
aktuell katalog kan hon t. ex. skriva .. för att referera till sin hemkatalog och ../fotografier/
slottet.jpg för att referera till det där fotografiet.
En användning av .. har du redan sett: cd ..
för att gå upp ett steg.
Fullständiga sökvägar börjar alltså med / och
utgår från roten (som ju betecknas /). Övriga sökvägar är relativa och utgår från aktuell katalog. En
tilde (~) i början av sökvägar är bara ett förkortat skrivsätt för något som börjar med /home, så
sådana sökvägar är också fullständiga.
Förutom .. för föräldrakatalogen finns även .
i varje katalog och betecknar just den katalogen. Det betyder alltså samma sak att skriva fotografier/slottet.jpg och t. ex. ./
fotografier/slottet.jpg eller fotografier/
./slottet.jpg.
Trots att dessa . och .. finns i varje katalog så
syns de normalt inte. Det är helt enkelt eftersom
de börjar med punkt och därför är dolda.
3.7
TAB
Det finns ett särskilt TAB-tecken som i textfiler
visas som ett hopp fram till nästa tabulatorposition, och dessa ligger normalt med åtta stegs mellanrum. Det är alltså bara ett tecken i filen, även
om det ser ut som mer.
När man editerar text används TAB-tangenten
för att göra ett »lagom långt« indrag, vilket kanske
är ett TAB-tecken, men kanske längre, och kanske
bara nåt enstaka mellanslag, beroende på vad det
är för slags text och hur omgivningen ser ut. Det
är alltså inte alls alltid så att det verkligen blir ett
TAB-tecken i en fil för att man trycker på den
tangenten.
Den tangenten används ju dessutom även till
annat. Vi har t. ex. använt den mycket till komplettering, och den används också ofta för att växla mellan olika inmatningsfält.
3.8
Skalkommandot cut
Kommandot cut klipper i sin indata så att bara
vissa delar av varje rad kommer med i utdata. Det
är vanligt att använda detta kommando för textfiler som innehåller flera kolumner, normalt avgränsade av det speciella TAB-tecknet. Med väljaren -f med ett tal som argument kan man då
klippa ut bara någon av dessa kolumner.
2 Man kan även skriva
<infil aaa istället för
aaa <infil vilket en del tycker gör ordningen tydligare.
27
3. MER OM SKALET
$ cat knattarna.txt
Knatte Fnatte Tjatte
Ole
Dole
Doffen
Rip
Rap
Rup
$ cut -f 1 knattarna.txt
Knatte
Ole
Rip
$ cut -f 2 knattarna.txt
Fnatte
Dole
Rap
Det går också att klippa ut flera kolumner tillsammans, som t. ex. cut -f 2-3 för kolumn 2
och 3.
I figurerna 3.2, 3.3 och 3.4 visas några exempel
på kommandorör där cut används tillsammans
med den där filen med Knattarnas namn på svenska, norska och danska.
3.9
Att tolka hjälp om
skalkommandon
I felmeddelanden har du sett att många kommandon tipsar om att man kan ge kommandot med
en väljare --help för att få hjälp om det kommandot. Det är en standard för GNU-program
att de ska ha en sådan väljare. Hjälptexten är skriven rätt kompakt och kräver att man är van för
att veta hur den ska tolkas. I figur 3.5 ges ett
exempel, med hjälptexten för head. Först kommer en usage-rad som sammanfattning. Det visar att det som vanligt kan komma ett antal väljare ([OPTIONS]...) och att det sedan kan följa
ett antal argument som är filnamn ([FILE]...).
Hakparenteserna visar att det är en optionell del
som inte behöver vara med. Punkterna visar att
det får finnas flera sådana.
Man kan jämföra med motsvarande rad för
grep som lyder
Den första raden beskriver hur man använder cp med två argument, till exempel
cp foo.ogg bar.ogg för att kopiera filen foo.
ogg till bar.ogg.
I den andra versionen kan det finnas flera
»SOURCE« (eftersom det står punkter efter) och
sista argument måste vara ett namn på en katalog. Det betyder att kopiera allt man räknar upp
som en »SOURCE« till den katalogen.
I beskrivningen som följer i figur 3.5 beskrivs
närmare hur de olika argumenten tolkas. Här står
bland annat att om man inte har angivit någon
FILE så kommer kommandot att »read standard
input« istället. Så beter sig många kommandon
som man kan ge filnamn som argument.
Större delen av beskrivningen är en lista med
olika väljare som kommandot tar. Här listas
synonyma väljare tillsammans. T. ex. betyder
head -q , head --quiet och head --silent
detsamma.
Vilka argument som ska ha argument framgår
också. Då det står --lines=[-]K så ska tydligen
--lines ha ett argument, och därmed även dess
synonym -n. Värdet för den väljaren skrivs här
som [-]K och tydligen ska K här ska vara ett
tal. Hakparenteserna betyder som på andra ställen nånting som kan vara med men inte behöver
vara med. Så argumentet är antingen ett minustecken följt av ett tal eller också bara ett tal. Så
man kan alltså skriva t. ex. head --lines=-17
och head --lines=17 . (Detta betyder olika saker. I beskrivningen står det mer om det.)
Om man använder -n i stället så blir det alltså head -n -17 eller head -n 17 , där det sistnämnda är ett sådant normalt anrop i stil med sådana du har gjort. (Om du vill veta vad det betyder att använda ett minustecken där får du lov att
läsa vidare i dokumentationen.)
Alla detaljer i hur head kan anropas är inte viktiga, utan det viktiga är här hur olika saker betecknas eftersom ni kan behöva kunna tolka sådana
Usage: grep [OPTION]... PATTERN [FILE]... här beskrivningar själv. Framförallt gäller det att
Här står det första argumentet, »PATTERN«, kunna plocka ut just den information man själv
texten som man ska söka efter, inte inom hak- behöver. Om t. ex. några väljare eller varianter
parenteser, så det argumentet måste alltid finnas verkar helt obegripliga så behöver inte det göra
med.3 Däremot behöver inte några filnamn finnas något så länge man inte behöver dem.
med.
Det kan också finnas flera alternativa sätt att
köra ett program. Kommandot cp som kopierar
filer kan t. ex. anropas på dessa två olika sätt:4
Usage: cp [OPTION]... SOURCE DEST
or: cp [OPTION]... SOURCE... DIRECTORY
3.10
Argumentet -
Observera särskilt en sak som står i hjälptexten
det första argumentet kallas för »pattern« är för att för head: »With no FILE, or when FILE is -, read
det inte behöver vara en fix text, utan kan vara ett mönster standard input«.
som man söker efter. Detta tar vi upp senare.
Detta gäller för många kommandon att man
4 Detta är en vit lögn. Det finns faktiskt ett tredje sätt ockkan
skriva - istället för ett filnamn för att komså, och det första sättet har en extra optionell väljare, men det
spelar ingen roll nu.
mandot ska läsa från standard input.
3 Att
28
3.10. Argumentet -
cut -f 3 knattarna.txt
⇒
Tjatte
Doffen
Rup
⇒
tail -n 1
Rup
⇒
Figur 3.2: Vad heter Tjatte på danska? Kommandoröret cut -f 3 knattarna.txt | tail -n 1
tail -n 1 knattarna.txt
⇒
Rip
Rap
Rup
⇒
cut -f 3
⇒
Rup
Figur 3.3: Vad heter Tjatte på danska med en annan metod. Kommandoröret tail -n 1 knattarna.txt |
cut -f 3
cut -f 2 knattarna.txt
⇒
Fnatte
Dole
Rap
⇒
grep a
⇒
Fnatte
Rap
Figur 3.4: Vilka »Fnattar« har ett namn med a i? Kommandoröret cut -f 2 knattarna.txt | grep a
$ head --help
Usage: head [OPTION]... [FILE]...
Print the first 10 lines of each FILE to standard output.
With more than one FILE, precede each with a header giving the file name.
With no FILE, or when FILE is -, read standard input.
Mandatory arguments to long options are mandatory for short options too.
-c, --bytes=[-]K
print the first K bytes of each file;
with the leading '-', print all but the last
K bytes of each file
-n, --lines=[-]K
print the first K lines instead of the first 10;
with the leading '-', print all but the last
K lines of each file
-q, --quiet, --silent
never print headers giving file names
-v, --verbose
always print headers giving file names
--help
display this help and exit
--version output version information and exit
K may have a multiplier suffix:
b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024,
GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y.
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
For complete documentation, run: info coreutils 'head invocation'
Figur 3.5: Hjälptexten för head.
29
3. MER OM SKALET
3.11
Skalskript
Om man vill göra om en följd av kommandon flera gånger så kan man spara undan dessa kommandon i ett skalskript (shell script).
Det är helt enkelt en textfil där kommandoraderna står, rad för rad, så som man annars hade skrivit in dem till ett skal. Ofta låter man sådana filer
få filnamnsändelsen .sh (som i shell).
Det är brukligt att börja sådana filer med en
särskild rad i stil med
#! /bin/bash
Detta talar om att det är just skalet bash som
det är tänkt ska utföra kommandona i denna fil.
(/bin/bash är nämligen en fullständig sökväg till
programmet bash.)
Ett sätt att utföra kommandona i en sådan fil
är att använda bash som kommando. Då körs ett
nytt skal igång som utför skalkommandona i filen.
$ cat lista-bilder.sh
#!/bin/bash
echo Här är några av dina bildfiler:
ls *.gif *.jpg *.png
echo Ha en trevlig dag!
$ bash lista-bilder.sh
Här är några av dina bildfiler:
ls: *.gif: No such file or directory
emacs.png fooey.jpg fooey.png wave.png
Ha en trevlig dag!
$ ls *.pdf
dn.pdf svd.pdf unt.pdf
så tänker man det sig kanske som att man bett
ls att se efter vad det finns för pdf-filer, men
egentligen är det skalet som expanderar *.pdf
till dn.pdf svd.pdf unt.pdf och sen utför kommandot ls dn.pdf svd.pdf unt.pdf , så när ls
börjar köra är den delen av jobbet redan utfört.
I många fall spelar det ingen roll om man tänker fel på det sättet, men i vissa fall så har det
betydelse och då blir man lätt förvirrad om man
inte inser hur det i själva verket förhåller sig.
När inga filer matchar jokeruttrycket så lämnas
jokeruttrycket kvar som det var och skickas vidare
till skalet.
$ ls *.pdff
ls: *.pdff: No such file or directory
Här har användaren råkat skriva fel och då
*.pdff inte matchade någonting så blev det verkligen ls *.pdff som utfördes, varpå ls klagade över att det inte fanns nån fil med namnet
*.pdff.
Här kan man också ha användning för kommandot echo. Eftersom det bara skriver tillbaka
alla argument som man gett det kan vara praktiskt
Här användes först kommandot cat för att vi- för att se hur skalet har expanderat argumenten.
sa innehållet i skalskriptet lista-bilder.sh och
sen kommandot bash för att utföra dessa rader i
$ echo foo *zzz* bar
ett nytt skal.
3.12
Expansion i skalet
foo *zzz* bar
$ echo hej *.txt hopp
hej cheshire-cat.txt how-doth.txt hopp
Det är alltså skalet som skickar ut indata till de
olika kommandona och tar hand om deras utdata.
(Här fanns det tydligen inga filnamn som matDessutom ändrar skalet de argument man skriver
chade
*zzz*, så det förblev oförändrat.)
på kommandoraden innan den skickar vidare det
till de olika kommandona.
En sådan ändring är att ~ och ~hanvändarnamni
expanderas till något längre. Det är alltså skalet
som gör detta och när man skriver cp foo.txt ~
för att kopiera en fil till sin hemkatalog så får
cp i själva verket en kommandorad i stil med
cp foo.txt /home/stp15/ellen att utföra.
(Det är inte bara skalet som gör sådana utbyten,
utan många andra program gör det också, så det
är därför det går att skriva filnamn med ~ t. ex. i
Emacs.)
Dessutom är det skalet som ser efter vad det
finns för filer så att den kan expandera jokeruttryck med *, ? och [].
När man ger ett kommando som
30
Inlupp 3: Mer om skalet
Redovisning
Uppgift 3.6 Ge ett kommando som tar fram
den näst första raden i din saga.
Skicka ett mail till Per med svar på frågorna. När
du ska ge ett kommando så svara alltid också med
vad det gav för resultat!
(Den sista uppgiften är lite klurig. Fastnar du så
Om du har fått mail angående uppgifter på förgå vidare med andra uppgifter tillsvidare.)
ra labben så svara på det separat istället för att
skriva ett mail om alltihop! Det underlättar mycket för min rättning om svar på olika inluppar ligFrån begabba till utströ
ger i olika mail.
Filen /local/kurs/ids/verb.txt innehåller en
lista med svenska verb. I denna fil har de baklängessorterats, dvs. sorterats efter slutet på orden. (Det innebär att rimord tenderar att hamna
Uppgift 3.1 Väljaren -n till head och tail har
efter varann.)
den långa varianten --lines. Hur ser ett komKopiera den till din kurskatalog från skalet. Ett
mando ut som använder den långa varianten för
sätt
att använda kopieringskommandot är ju att
att ta fram de 15 första raderna av stp.txt?
ge ett sista argument som är den katalog som filer
ska kopieras till. Använd det sättet, och kopiera
Det var en gång . . .
till aktuell katalog med en kort beteckning (ett
tecken!) för aktuell katalog.
Gå till kurskatalogen. Där ska bland annat din
saga.txt från s. 22 finnas.
Uppgift 3.7 Hur löd ditt kommando?
Uppgift 3.2 Ge ett kommando som tar fram de
Uppgift 3.8 Ge ett kommando för att räkna ratre första raderna av din saga.
der och ord i den där filen. (Det ska ligga ett ord
Om detta visar hela din saga har du inte följt per rad, så det borde vara lika många ord som rainstruktionerna riktigt på sidan 22, så gör om det der.)
Långa väljare
i så fall!
Uppgift 3.3 Ge ett kommando som räknar hur
många ord det finns i de tre första raderna av din
saga.
Uppgift 3.9 Ge ett kommando som talar om
vilka verb där som innehåller »vv« (som t. ex. »avvisa«).
Uppgift 3.10 Ge ett kommando som börjar som
det i förra frågan och sen fortsätter med ett kommandorör så att du får fram hur många verb som
innehåller »vv«.
(Missa inte vad som står fetstilt under »Redovisning« ovan!)
I uppgift 2.29 skapade du en fil saga40.txt Uppgift 3.11 Ge ett kortare kommando som
som innehåller samma text som saga.txt, men gör samma sak som förra uppgiften genom att anomformatterad så att radlängden är max 40.
vända en lämplig väljare till sökkommandot. Därmed behövs inget kommandorör.
Uppgift 3.4 Ge ett kommando som räknar hur
Uppgift 3.12 Ge ett kommando som listar vilmånga rader det är i saga40.txt.
ka av de tio första verben i hela verb.txt som
Uppgift 3.5 Om du inte hade den där filen innehåller bokstaven j.
saga40.txt hur skulle du då (utan att skapa
en sådan fil som mellanresultat) ta reda på hur Uppgift 3.13 Ge ett kommando som listar de
många rader din saga.txt skulle få om den bröts första tio verben i verb.txt som innehåller bokstaven j.
om till att få så korta rader?
31
INLUPP 3: MER OM SKALET
Tycker du att de två föregående uppgifterna är
likadana har du inte läst tillräckligt noga! Kommandona och deras resultat skiljer sig åt.
Uppgift 3.14 Ge ett kommando som listar de
verb som innehåller båda bokstäverna j och y.
(I resultatet ska bland annat »djupfrysa« och
»nyttja« finnas med.)
Av-stav-ning
Ge kommandot
avstava -l sv Detta är ett exempel
som avstavar sina argument med hjälp av svenska avstavningsregler. (Detta är inte ett standardprogram utan något som Per lagt upp för dessa
uppgifter.) Väljaren -l (l som i language) tar ett
argument (här »sv«) som anger vilket språk texten är på. (Använder man inte den väljaren antar programmet att texten är på engelska.) Språken anges enligt en internationell standard för
språkförkortningar, varav några koder nämns i tabell 3.1 (men programmet klarar inte alla dessa
språk).
Uppgift 3.15 Vad gav det för resultat?
Uppgift 3.16 Ge ett kommando som avstavar
ordet »Weltschmerz« på tyska.
Uppgift 3.17 Ta fram hjälptexten för kommandot avstava. Det står att det finns en lång version
av väljare -l också. Gör om förra uppgiften men
använd den långa versionen istället.
Uppgift 3.18 Vad står det i hjälptexten att programmet gör om den inte får några texter som
argument?
Uppgift 3.19 Ge ett kommando som ger din
saga.txt avstavad. Använd väljaren för att se till
att rätt språk används!
Uppgift 3.20 Ge ett kommando som visar avstavningar av alla verb i verb.txt som innehåller
bokstaven z.
Delstater
I filen /local/kurs/ids/us-states.txt finns
en lista över USA:s delstater tillsammans med
datum då de ratifierade USA:s konstitution eller
kom med i unionen.5
Kopiera den till din kurskatalog och titta på den
i Emacs. Den är sorterad efter datumet.
Tryck C-s (för sökning) och sen TAB för att söka efter TAB-tecken. Gå även fram och bak tecken för tecken (med <right> och <left> eller
5 Enligt
32
http://en.wikipedia.org/wiki/U.S._state.
Tabell 3.1: Språkkoder enligt standarden ISO 639-1
för några språk med många talare i världen, Europa,
Norden eller Sverige
sq
ar
bn
nb
bs
bg
da
en
fi
fr
el
hi
is
it
ja
yi
zh
xy
ku
albanska
arabiska
bengali
bokmål
bosniska
bulgariska
danska
engelska
finska
franska
grekiska
hindi
isländska
italienska
japanska
jiddisch
kinesiska
kroatiska
kurdiska
nl
se
no
nn
fa
pl
pt
ro
ru
sr
so
es
sv
cs
tr
de
uk
hu
be
nederländska
nordsamiska
norska
nynorska
persiska
polska
portugisiska
rumänska
ryska
serbiska
somaliska
spanska
svenska
tjeckiska
turkiska
tyska
ukrainska
ungerska
vitryska
C-f och C-b ) så märker du också att det bara är
ett tecken mellan datumet och namnet.
Uppgift 3.21 Ge ett skalkommando som bara
listar raderna för de delstater som kom med i USA
på 1850-talet.
Uppgift 3.22 Ge ett kommando som klipper ut
bara alla delstaternas namn.
Uppgift 3.23 Ge ett kommando som skriver ut
alla delstater (utan datum) som har »New« med i
sitt namn.
Uppgift 3.24 Ge ett kommando som skriver ut
alla delstater (utan datum) som har ett mellanrum med i sitt namn.
Kommandot sort är ett filter som sorterar de
rader det får in i alfabetisk ordning och skriver ut
resultatet.
Uppgift 3.25 Ge ett kommando som skriver ut
bara deltstaternas namn, sorterade i alfabetisk
ordning.
Uppgift 3.26 Ge ett kommando som skriver ut
de tretton ursprungliga delstaterna (dvs. de tretton första i listan), sorterade i alfabetisk ordning.
Uppgift 3.27 Ge ett kommando som skriver ut
vilken delstat som kommer sist i alfabetisk ordning.
Skalskript
Skalskript
Öppna en ny fil saga.sh i din kurskatalog och
skriv detta innehåll i den:
echo Antal ord i min saga:
wc -w saga.txt
echo
echo Sista raden i min saga:
tail -n 1 saga.txt
Utför sedan kommandona i den med
bash saga.sh . Om det inte fungerar har
du gjort nåt fel. Se över det föregående tills du
får det att fungera.
När du editerar denna fil i Emacs står det
»Shell-script« i informationsraden i Emacs.
Emacs vet alltså om att det är ett sådant du
editerar och det finns en del särskilda funktioner
för just detta. Det finns bland annat en särskild
meny »Sh-Script« med ett kommando Sh-Script
Set shell type . Använd det. Du får svara på en uppgift i minibufferten. Tryck bara retur för att få defaultvärdet.
Uppgift 3.28 Vad tror du det var som fick
Emacs att veta att det var ett skalskript du höll
på att skriva?
Uppgift 3.29 Kommandot lade till en speciell
rad i början av din text. Hur lyder den?
Uppgift 3.30 Vad är den till för?
två till din kurskatalog. Titta på rummet.words i
Emacs! (Interpunktion som ,.;:?! räknas här som
egna ord med ordklassen »punkt« – kort för interpunktion.)
Uppgift 3.33 Kolumnen med ordklass verkar
hoppa lite och stå olika långt till höger för olika
ord. Hur kommer det sig?
Uppgift 3.34 Ge ett kommando för att spara en
sorterad lista av rummet.words i en ny fil rummet.
sorted.
Uppgift 3.35 Skumma igenom filen för att se
efter hur sorteringen har blivit. Är det nåt anmärkningsvärt med den? (Vi återkommer till olika slags sortering senare.)
Uppgift 3.36 Ge ett kommando som bara plockar ut ordklasserna från rummet.words och sparar
dessa sorterade i en fil rummet.ordklasser. (Det
borde bli många rader efter varandra som är likadana där, t. ex. många rader som det bara står
»subst« på.)
För nästa uppgift behöver du en ny väljare till
kommandot som du har räknat ord och annat
med. Se på dess hjälptext!
Uppgift 3.37 Ge ett kommando som talar om
hur långt det längsta ordet i rummet.words är.
(Bara själva ordet ska mätas, utan dess ordklassmarkör.)
Uppgift 3.31 Kortkommandona för kommandona i menyn Sh-Script börjar nästan alla med samma prefixtangent. Vilken?
Uppgift 3.38 Ge ett kommando som ger de tre
första raderna i rummet.txt med avstavningar.
Den tangenten används i Emacs som prefix för
sånt som är speciellt för just den slags fil man editerar just nu. Om det inte vore ett skalskript så
kanske samma tangenter hade betytt något annat.
Gott och blandat
Uppgift 3.32 Utöka detta skalskript så att det
även skapar en fil saga-av.txt där din saga
har avstavats. Eftersom avstavningen gör raderna
längre så använd fmt efteråt för att få lagom långa
rader igen.
Uppgift 3.39 Om du nu utan att byta katalog
vill lista innehållet i din kurskatalog i skalet, (det
vill säga katalogen ett steg upp,) hur skriver du
då?
När ditt skalskript körs ska ingenting skrivas ut
i terminfönstret. Det enda som ska hända är att
den filen skapas med det angivna innehållet.
Skriv cd alice för att gå ner till den underkatalog som du skapade i uppgift 1.6.
Uppgift 3.40 Och vad ger du för kommando för
att kopiera cheshire-cat.jpg där till din kurskatalog? (Gör detta!)
Uppgift 3.41 Vilka av följande sökvägar är fullständiga, och vilka är relativa?
a) /local/texts/jabberwocky
Röda rummet
b) bar.txt
c) ~/korpus.txt
Filen /local/kurs/ids/rummet.txt innehåller
d) ~starback/exempel.txt
början av August Strindbergs roman Röda rume) inte/mitt/bord
met. Filen rummet.words i samma katalog innef) ~ellen
håller samma text, men med ett ord per rad tillg) ../FILNAMN
sammans med ordklassangivelse. Kopiera dessa
33
INLUPP 3: MER OM SKALET
Uppgift 3.42 Hur många argument ges till
kommandot i dessa exempel? Räkna inte med väljare och argument till väljare.
a) sort korpus20.txt
b) mv foo.txt bar.txt ~/Desktop
c) echo I am the walrus.
d) echo 'I am a donkey.'
e) tail -n 3 Min fil.txt
När du börjar komma in i att använda kommandorör så börjar du kanske skriva sånt som
cat saga.txt | head -n 1 för att ta fram första raden i din saga.
Men det är ju alldeles onödigt! Här behövs inget kommandorör.
Uppgift 3.43 Hur skriver man istället som är
kortare, vackrare och enklare?
»GNOME Calculator« är ett program som man
normalt skulle köra från menyerna, men kör det
istället från kommandoraden. Programmet heter
gnome-calculator. Observera att du inte får någon ny prompt i terminalen förrän du avslutar
programmet (genom att ta bort dess fönster). Det
är det normala i skalet att endast ett program i taget utförs.
Skriv sen gnome-calculator --help för att få
se en hjälptext där det står om en del väljare det
har.
Uppgift 3.44 Vad kan du ge för kommando för
att starta en räknare där det står »x = 11147 ∗
4711« i räknarfönstret från början?
Uppgift 3.45 Vad ger det för svar i kalkylatorn
när man trycker på retur?
Uppgift 3.46 Hur kan du med ett skalkommando skapa en fil foo.txt i vilken det står »blahonga«?
Filnamn som börjar med
bindestreck
Gå till katalogen lenngren som du skapat tidigare och skriv grep Den * för att visa vilka rader i
filerna i denna katalog som innehåller »Den«.
Uppgift 3.47 Vad gav det för resultat?
Skapa (med Emacs) en fil som heter -i (två
tecken) i samma katalog. Skriv »Den Den Den« i
den.
34
Uppgift 3.48 Gör om samma kommando som i
förra uppgiften. Visa ditt kommando och det resultat du fick.
Uppgift 3.49 Hittade du den där raden »Den
Den Den« som du nyss skrev? Varför blev det som
det blev?
Uppgift 3.50 Vad blev det för annan skillnad?
Varför?
Kapitel 4
Teckenrepresentation
Temat i detta kapitel är teckenkodningar och lo- 4.2 Teckenkoder
cales, men först kommer korta stödanteckningar
När en vanlig text (plain text) lagras i en fil eller
om tvåpotenser.
ska föras över mellan datorer eller program måste
en viss teckenkodning användas, dvs. ett sätt att ge
varje tecken en numerisk kod.
4.1 Binärt
Filer lagrar olika slags data som en sekvens av
bytes, som kan ses som värden 0–255, så det enkDen minsta enheten information är en bit – något laste sättet att lagra text är att varje tecken får en
som bara kan ha två värden. Av eller på, upp eller kod från 0 till 255.
ner, svart eller vitt, 0 eller 1.
För varje ny bit fördubblas antalet möjligheter.
4.3
21
= 2
22
= 2·2=4
3
2
=
2·2·2=8
24
=
2 · 2 · 2 · 2 = 16
5
=
2 · 2 · 2 · 2 · 2 = 32
6
=
2 · 2 · 2 · 2 · 2 · 2 = 64
7
2
=
2 · 2 · 2 · 2 · 2 · 2 · 2 = 128
28
=
2 · 2 · 2 · 2 · 2 · 2 · 2 · 2 = 256
9
2
=
2 · 2 · 2 · 2 · 2 · 2 · 2 · 2 · 2 = 512
10
=
2 · 2 · 2 · 2 · 2 · 2 · 2 · 2 · 2 · 2 = 1024
2
2
2
och så fortsätter det 2 048, 4 192, 8 192, 16 384,
32 768, 65 536, osv. Så med t. ex. fyra bitar kan
ett av 16 olika värden lagras.
Dessa tal dyker upp i många sammanhang. Det
finns t. ex. 8 bitar i en byte. Det finns 256 möjliga värden på en byte. Med kilo menas i datorsammanhang oftast inte exakt tusen, utan 1 024,
liksom Mega oftast inte betyder exakt en miljon
utan 220 som är lite mer än en miljon.
Att skriva tal binärt är att skriva dem med bara
två siffror, 0 och 1. T. ex. kan 256 olika tal (0255) skrivas med åtta binära siffror. Annat som
förekommer är oktalt (åtta olika siffror, 0–7) och
hexadecimalt (sexton olika siffror, 0–9 och A–F).
(En oktal siffra innehåller lika mycket information som tre bitar. En hexadecimal siffra innehåller lika mycket information som fyra bitar.)
Att ange teckenkodning
Det finns många olika teckenkodningar, vilket kan
ställa till problem. På samma system (i samma
operativsystem; i samma program) använder man
oftast samma teckenkodning genomgående och
råkar inte ut för några problem. Trycker man på
en tangent som det står »Å« på får man naturligt
nog ett tecken »Å« på skärmen och sparar man det
i en fil så kommer samma tecken fram nästa gång
man tittar på det.
Det besvärliga kommer när man ska föra över
data mellan system som använder olika teckenkodningar. Då finns det risk för att den kod man
skickar iväg som betyder »Å« i ens egen system betyder nåt annat på det andra systemet. Det är därför viktigt a) att man använder en teckenkodning
som mottagande system känner till, och b) att
man talar om vilken teckenkodning man har använt. Då får mottagaren(s system) möjlighet att
tolka informationen rätt. Oftast fungerar sånt automatiskt. I figur 4.1 ges ett exempel på hur det
kan bli annars.
Detta görs med standardiserade beteckningar
för olika teckenkodningar, och det är organisationen IANA (Internet Assigned Numbers Authority) som håller i dessa beteckningar, precis som
de håller i flera andra standarder som används på
Internet.
I flera sammanhang när text skickas över nätet,
t. ex. för datorpost och över webben, så används
dessa standardiserade beteckningar, så istället för
att bara texten skickas över så skickas det även
35
4. TECKENREPRESENTATION
Varf÷r blir det sÕ hõr?
s
å
[SPC]
h
ä
r
115
229
32
104
228
114
s
Õ
[SPC]
h
õ
r
Figur 4.1: Exempel på fel. En text är skriven med vissa koder, men
tolkas utifrån andra koder. I detta fall är det Latin-1 som tolkats som
CP850.
med en etikett som talar om vad det är för slags
text så att mottagaren vet hur det ska tolkas.
Normalt ordnar sig sådant automatiskt, men ni
kan ändå då och då stöta på tillfällen när ni måste
kunna hantera detta själva.
Även filnamn med åäö eller andra »konstiga«
tecken kan orsaka problem när man skickar dem
mellan datorer om de inte använder samma teckenkodning.
4.4
ASCII
En traditionell teckenkodning med stor genomslagskraft är ASCII (American Standard Code for
Information Interchange). Med beteckningar från
IANA kan den bland annat kallas ASCII eller
US-ASCII. (Det finns ofta flera IANA-namn på
samma teckenkodning.) Den omfattar koder från
0 till 127 och visas i figur 4.2.
ASCII är en amerikansk och internationell standard från 1960-talet (dagens version är i praktiken
ekvivalent med den från 1968) som snabbt antogs
av de flesta och som fortfarande används ofta.
4.5
Kontrolltecken och nyrad
• 9, [HT] = Horizontal tabulation: »advances the active position to the next predetermined character position on the same
line« (= TAB)
• 10, [LF] = Line feed: »advances the active
position to the same character position of the
next line«
• 13, [CR] = Carriage return: »moves the active position to the first character position on
the same line«
Med beskrivningarna ovan behövs två »tecken«
för att en text ska fortsätta på början av nästa rad:
[CR] och [LF]. [CR] (vagnretur) för att börja skriva på början av raden och [LF] (radframmatning)
för att gå fram till nästa rad. De brukar ges i just
den ordningen [CR] + [LF] och kombinationen
kallas ibland tillsammans för CRLF.
I Unix används dock bara ett tecken, [LF], för
att börja på en ny rad, så man har tolkat om detta
teckens betydelse. Det brukar då kallas för newline och betecknas ibland som \n.
MS Windows använder däremot det traditionella [CR]+[LF] och det brukar även krävas vid
kommunikation mellan datorer på nätet.1
Dessutom är det vanligt i en del sammanhang
att en sådan kod som ursprungligen används för
att beteckna ny rad (oavsett vilken variant man
använder) istället används för att indikera nytt
stycke medan man låter rader brytas automatiskt.
Dessa skillnader gör att vanliga textfiler kan
skilja sig åt mellan olika system även om båda använder ASCII.
Kontrolltecknet [HT] ovan kallas oftare för
TAB och har en egen tangent på tangentbordet.
(Se avsnitt 3.7.)
Ett annat kontrolltecken som har en egen tangent är [ESC] (Escape, tecken 27) som används
till många olika saker. I övrigt kan man skicka
kontrolltecken från terminalen genom att använda Ctrl-tangenten. Med Ctrl-A skickar man tecken 1, Ctrl-B ger tecken 2, osv., och i en del sammanhang betecknas dessa tecken med ^A, ^B osv.
Eftersom J är den tionde bokstaven är alltså ^J
tecken 10, dvs. [LF] (line feed, newline).
Om man vill lägga in ett kontrolltecken i en fil i
Emacs räcker det inte med att bara trycka så. Om
man trycker t. ex. C-a så betyder det istället att
gå till början av raden, osv.
Då får man lov att använda kommandot C-q
(med q som i »quote«) före tecknet, så med
C-q C-a lägger man in kontrolltecken nummer 1, osv.
Även i en ren textfil finns det ofta mer än bara
grafiska tecken med utseenden som hämtas från
en visst font. De består ju ofta av flera rader, och
då måste även nyrad representeras på något sätt.
Sådana och andra »tecken« som inte motsvarar något grafiskt tecken som kan skrivas ut på papper
eller på en skärm kallas för kontrolltecken. De har
istället någon annan betydelse när en text lagras i
en fil, när tecken ska skickas från en terminal till
en dator eller från en dator till en terminal eller
liknande.
I ASCII är tecken 0–31 samt 127 kontrolltecken.
1 I Mac-världen användes förr istället endast [ CR ] för denNågra har effekten att flytta på markören. Här na funktion, men eftersom Mac OS X är en Unix så använder
moderna Mac-datorer också [LF].
är de viktigaste:
36
4.6. Latin-1
!
1
65
A
81
Q
97
a
113
q
"
2
66
B
82
R
98
b
114
r
#
3
67
C
83
S
99
c
115
s
$
4
68
D
84
T
100
d
116
t
%
5
69
E
85
U
101
e
117
u
&
6
70
F
86
V
102
f
118
v
'
7
71
G
87
W
103
g
119
w
(
8
72
H
88
X
104
h
120
x
)
9
73
I
89
Y
105
i
121
y
*
:
74
J
90
Z
106
j
122
z
+
;
75
K
91
[
107
k
123
{
,
<
76
L
92
&
108
l
124
|
=
77
M
93
]
109
m
125
}
.
>
78
N
94
^
110
n
126
~
/
?
79
O
95
_
111
o
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
0
64
@
80
P
96
‘
112
p
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
48
127
DEL
Figur 4.2: ASCII-tecken 32–127. Kod 32 är mellanslag. Kod 127 är inte ett egentligt tecken utan »kontrolltecknet« Delete. Även
kod 0 till 31 är olika kontrolltecken som inte visas här.
¡
ś
193
Á
209
Ñ
225
á
241
ñ
¢
š
194
Â
210
Ò
226
â
242
ò
£
ş
195
Ã
211
Ó
227
ã
243
ó
¤
´
196
Ä
212
Ô
228
ä
244
ô
¥
ţ
197
Å
213
Õ
229
å
245
õ
¦
¶
198
Æ
214
Ö
230
æ
246
ö
§
·
199
Ç
215
Ö
231
ç
247
ö
¨
¸
200
È
216
Ø
232
è
248
ø
©
ź
201
É
217
Ù
233
é
249
ù
ª
º
202
Ê
218
Ú
234
ê
250
ú
«
»
203
Ë
219
Û
235
ë
251
û
½
205
Í
221
Ý
237
í
253
ý
®
¾
206
Î
222
Þ
238
î
254
þ
¯
¿
207
Ï
223
ß
239
ï
255
ÿ
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
°
192
À
208
Ð
224
à
240
ð
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
176
ň
¼
204
Ì
220
Ü
236
ì
252
ü
Figur 4.3: Tecken 160–255 i Latin-1. Tecken 160 är nbsp = non-breaking space. Tecken 173 är shy = soft hyphen – en möjlig
avstavningspunkt där »-« ska visas om det blir avstavning där, men som annars inte syns. Tecken 128–159 är kontrolltecken, och
visas inte här.
4.6
Latin-1
Standarden utökas eftersom både med gamla
tecken och helt nya tecken. Nuvarande versionen
I ASCII finns bara ungefär de tecken som finns på Unicode 7.0 släpptes t. ex. i juni i år, och innehålen amerikansk skrivmaskin och alla tecken har ko- ler 2 834 nya tecken jämfört med förra versionen.
der från 0–127.
Bland de nya tecknen finns bland annat Linear A
Eftersom det kan finnas värden 0–255 i varje och två nya valutasymboler för rubel och manat.
Unicode har nu totalt över 100 000 tecken och
byte så finns det plats för dubbelt så många olika
det
finns plats för drygt en miljon tecken.
tecken när man lagrar text i en fil. Latin-1 är en
Kod 0–255 är som för Latin-1 (så 0–127 är som
utökning där man även använder koderna 128–
255 till mer tecken. Den är tänkt att innehålla så- för ASCII).
dana tecken som behövs för västeuropeiska språk
Förutom den numeriska koden innehåller Unisom skrivs med latinskt alfabet. De tecken som code även bland annat
lagts till den visas i figur 4.3 och där ingår t. ex.
• Ett namn för varje tecken (som LATIN CAPIsvenska åäö.
TAL LETTER A WITH RING ABOVE , ARABIC
QUESTION MARK och HEXAGRAM FOR DIF FICULTY AT THE BEGINNING )
•
Information
om vad för slags tecken de oli4.7 ISO 10646 = UCS ≈ Unicode
ka tecknen är (alfabetiska, siffror, interpunktion, . . . )
Men det finns ju fler alfabeten, som det ryska och
•
Information
om vilka tecken som skrivs från
det arabiska. Och andra skriftsystem med stavelhöger
till
vänster
och vilka som skrivs från
setecken och ideografiska tecken. Numer har tecvänster
till
höger
kenkodningen Unicode tagit över allt mer, såväl
• Information om vilka tecken som motsvarar
under Unix som Microsoft Windows och annars.
varandra som små och stora bokstäver
Med det är det tänkt att man ska kunna skriva alIbland betecknas tecknen med »U+« och teckla naturliga språk (levande och döda), samt dessutom en stor mängd matematiska och andra sym- nets hexadecimala kod. Tecknet ≤, med namnet
LESS - THAN OR EQUAL TO , är t. ex. tecken numboler.
Egentligen finns det två olika projekt: Det ena mer åttatusen åttahundra fyra, men oftare beteckär en standard från standardiseringsorganisatio- nar man det hexadecimalt som U+2264 istället
nen ISO: UCS = Universal Character Set, eller för 8804.
ISO 10646. Det andra är Unicode från ett konsortium av datorföretag. De båda standarderna
4.7.1 UTF-8
har dock anpassat sig till varandra, så i de flesta
bemärkelser är det numer samma sak och det är Eftersom det finns långt fler än 256 tecken krävs
Unicode som det oftast talas om.
det flera bytes per tecken. Detta är ett skäl till att
37
4. TECKENREPRESENTATION
H
text:
namn:
LATIN
CAPITAL
LETTER
H
a
LATIN
SMALL
LETTER
A
l
l
LATIN
SMALL
LETTER L
LATIN
SMALL
LETTER L
unicode:
72
97
108
108
utf8:
72
97
108
108
å
!
EXCLA MATION
MARK
LATIN
SMALL
LETTER
A WITH
RING
ABOVE
229
195
165
,
[SPC]
SPACE
WHITE
SMILING
FACE
33
32
9786
33
32
226
152
186
Figur 4.4: Den korta texten »Hallå! ,« lagras med UTF-8. Olika tecken tar olika mycket plats att lagra.
Varför blir det så här?
s
å
[SPC]
h
ä
r
unicode:
115
229
32
104
228
114
utf8:
115
195
182
32
104
195
165
114
latin-1:
115
195
182
32
104
195
165
114
s
Ã
¥
[SPC]
h
Ã
¤
r
text:
text:
Figur 4.5: Exempel på teckenkodningsfel där en text skriven med UTF-8 tolkas som om det vore Latin-1.
Unicode är besvärligare att hantera än t. ex. ASCII
och Latin-1.
För att spara utrymme så lagrar man ofta
Unicode-text på ett sådant sätt så att olika tecken
tar olika mycket plats att lagra.
Det finns flera sätt att göra detta, varav ett heter
UTF-8. Där tar tecken mindre plats att lagra ju
lägre kod de har:
•
•
•
•
Kod 0–127: 1 byte (ASCII)
Kod 128–2 047: 2 bytes
Kod 2 048–65 535: 3 bytes
Kod 65 536–1 114 111: 4 bytes
Om en fil bara innehåller ASCII-tecken (kod
0–127) så blir det alltså precis likadant med
US-ASCII som med UTF-8. Kommunikation över
Internet använder allt oftare UTF-8. I december
2007 blev UTF-8 det vanligaste sättet att koda
texter på webben, och i början av 2010 hade det
kommit upp till hälften av alla webbsidor, enligt
interna data från Google.
I figur 4.4 ges ett exempel på hur en kort text
(åtta tecken) kan lagras där olika tecken tar upp
olika många bytes. Det som tar mest plats tar upp
38
tre bytes. Det är nästan bara väldigt ovanliga ideografiska tecken och utdöda skriftsystem som har
så höga koder att de behöver fyra bytes med UTF8.
Om man ser text som ser ut »sÃ¥ här« istället för »så här« så är det på grund av trassel med
teckenkodning. Så ser UTF-8-text ut om den tolkas som Latin-1. Se figur 4.5! Observera att bokstäverna a–z ser likadana ut (de ingår ju i ASCII)
medan åäö lagras i två bytes var med UTF-8 och
dessa två bytes har här felaktigt tolkats som något
helt annat.
4.8
Övriga teckenkodningar
Innan Unicode slog igenom användes en mängd
olika teckenkodningar i olika sammanhang. Det
fanns vissa som bara användes för att hantera rysk
text, vissa bara för japansk text, osv. Än idag används inte Unicode genomgående, så ni kommer
då och då behöva hantera annat.
Nästan alla bygger på ASCII, så man kan vara
rätt säker på att »A« är kodat som 65, »B« som
66 osv. i nästan alla sammanhang, trots att det-
4.9. Vad är olika tecken?
ta egentligen är rätt godtyckligt och hade kunnat
vara på något annat sätt.
Här tas bara några av de vanligare upp.
figur 4.6
Figur 4.6: Figur 4.6
4.8.1
ISO 8859-*
Latin-1 heter egentligen ISO 8859-1 och är bara
en av en hel serie standarder från ISO som heter
ISO 8859-1, ISO 8859-2, . . . ISO 8859-162 . Hos
IANA finns dessa registrerade som ISO-8859-1,
ISO-8859-2 osv.
De är alla utökningar av ASCII som använder
koderna 128–255 till ytterligare tecken.
Så som ISO 8859-1 är tänkt för västeuropeiska språk har de övriga andra inriktningar. T. ex.
är ISO 8859-3 till för sydeuropeiska språk och
ISO 8859-6 för arabiskt alfabet.
Att ISO 8859-1 kallas för Latin-1 är för att det
är den första av dem som är till för språk med
latinskt alfabet.
ALPHA ) trots att de (beroende på typsnitt) kan se
likadana ut. (Att de är olika märks om inte annat
på motsvarande gemena bokstäver a och α.)
Samma tecken kan också se olika ut i olika positioner i texten. Ett f följt av ett i blir t. ex. ofta en
sammanhängande ligatur fi (se uppförstoringen i
figur 4.6), men det räknas ändå som två olika tecken. Många arabiska bokstäver har olika former
beroende på om de kommer i början, mitten eller
slutet av ett ord.
Termen glyf används ibland för ett specifikt grafiskt utseende, till skillnad från den mer abstrakta
termen tecken.
4.8.2
4.9.1
Microsoft Windows
Microsoft har använt en del egna utökningar av
ISO-8859-familjen. Den viktigaste av dessa är
windows-1252 som bygger på Latin-1.
Den innehåller alla skrivtecken som Latin-1
gör, men ersätter en del av kontrolltecknen 128–
159 med ytterligare skrivbara tecken, t. ex. C, †,
h, ž och Ÿ, som inte finns med i Latin-1.
Den kallas ibland även för WinLatin1, men
windows-1252 är det enda namn för denna teckenkodning som Microsoft har registrerat hos
IANA .
I MS Windows-världen kallas denna teckenkodning märkligt nog ibland för »ANSI« (såsom
den amerikanska standardiseringsorganisationen
American National Standards Institute), trots att
det inte är någon ANSI-standard!
Eftersom den liknar Latin-1 så mycket finns det
risk för sammanblandning. Ibland sprids filer från
MS Windows-världen med felaktiga etiketter som
påstår att texterna är skrivna med Latin-1 fast det
egentligen är windows-1252 vilket kan ställa till
med problem.
4.9
Vad är olika tecken?
Det är inte i första hand det grafiska utseendet
som avgör vad som ska räknas som varianter av
samma tecken eller som ska räknas som olika tecken. T. ex. är a och a samma tecken (I Unicode
LATIN SMALL LETTER A , tecken 97) trots att de
ser olika ut.
Däremot är svenska A och grekiska A olika tecken (tecken 65: LATIN CAPITAL LETTER A respektive tecken 913: GREEK CAPITAL LETTER
2 Utom
Samma tecken i
ASCII
Med Unicode görs minst lika mycket skillnad på
olika tecken som görs när man sätter text i tryck.
Men i ASCII finns inte lika många särskillnader.
Där finns t. ex. bara ett tecken - trots att man i
tryck skiljer på olika långa sådana streck t. ex. i
abc-bok (kortare bindestreck) och kl. 13–15 (längre intervalltecken).
Ett annat exempel är citattecken. På t. ex. engelska så används olika citattecken före och efter
citat. Det kan se ut “like this” eller ‘like this’. Hur
skillnaden ser ut skiljer sig åt i olika typsnitt. I figur 4.7 finns ett par rätt olika exempel.
På skrivmaskiner nöjde man sig dock med raka neutrala citattecken som skulle gå lika bra
att använda både före och efter, och så är det i
ASCII och t. ex. Latin-1 också: "like this" eller
'like this'. (Citattecknen är tecken 34 och 39
i figur 4.2.)
I ASCII finns det dock även grav accent (tecken nummer 96 i figuren). Ibland kan man stöta
på text som använder den som citatstart så det
är skrivet `like this'. Detta ser rätt skevt ut,
och är inte att rekommendera, men förr fanns det
en hel del fonter där tecknet ' inte var rakt, utan
vinklat, så då såg det helt OK ut.
“quote”
“quote”
Figur 4.7: Hur tecknen för startcitat och slutcitat
skiljer sig åt skiljer sig i olika typsnitt. De två exemplen här är Helvetica och Palatino.
ISO 8859-12 som inte finns.
39
4. TECKENREPRESENTATION
En apostrof, som i »don’t« är samma tecken
som ett slutcitattecken. I Unicode beskrivs tecknet som RIGHT SINGLE QUOTATION MARK, men
det används även för apostrof. På svenska kan för
övrigt detta tecken användas både före och efter
citat: ’så här’.
Programspråk använder sällan tecken utanför ASCII i speciella betydelser, så källkod till
program innehåller vanligtvis bara ASCII utom
kanske i textsträngar och kommentarer.
4.10
Språkinställningar
En fil med vanlig text har i allmänhet ingen information i sig om vilken teckenkodning den använder. En fil med två bytes, 241 och 214, kanske
är en Latin1-fil med texten »ñÖ«, eller kanske en
ISO-8859-7-fil med de grekiska bokstäverna »ρϕ«
eller kanske en ISO-8859-5-fil med de kyrilliska
bokstäverna »«3 eller något helt annat!
Program som gör något med textfiler måste ofta
veta vilken teckenkodning de är lagrade med. Om
sort ska kunna sortera en fil med en sådan rad så
spelar det ju t. ex. roll om första tecknet där är ñ
vilket antagligen ska sorteras likadant som n.
Dessutom måste de ibland veta vad det är för
språk för att rätt kunna behandla en text.
Dessa inställningar kallas för ens locale och man
har standardinställningar för detta som gäller om
man inte säger till om annat.
Dessa inställningar kan även ändra vilket språk
program ska använda i sin output ifall programmet har översatts till flera olika språk. Programmet läser av användarens språkinställningar och
ändrar beteende utifrån det.
Tabell 4.1: Koder enligt ISO 3166-1 för några av
världens och Europas största länder, samt de skandinaviska länderna
AZ
BD
BE
BR
BG
CD
DK
EG
ET
PH
FI
FR
GR
IN
ID
IR
IS
IT
JP
CN
MX
NL
Azerbajdzjan
Bangladesh
Belgien
Brasilien
Bulgarien
Kongo-Kinshasa
Danmark
Egypten
Etiopien
Filippinerna
Finland
Frankrike
Grekland
Indien
Indonesien
Iran
Island
Italien
Japan
Kina
Mexiko
Nederländerna
NG
NO
PK
PL
PT
RO
RU
CH
RS
ES
GB
SE
TH
CZ
TR
DE
US
UA
HU
VN
BY
AT
Nigeria
Norge
Pakistan
Polen
Portugal
Rumänien
Ryssland
Schweitz
Serbien
Spanien
Storbritannien
Sverige
Thailand
Tjeckien
Turkiet
Tyskland
USA
Ukraina
Ungern
Vietnam
Vitryssland
Österrike
.se är Sverige osv.4 I tabell 4.1 återges en del
av landskoderna. Dessa standarder är reglerade
av den internationella standardiseringsorganisationen ISO.
Både språk och land anges alltså. Några exempel:
• sv_SE : Svenska i Sverige
• sv_FI : Finlandssvenska
• en_GB : Brittisk engelska
• en_ZA : Sydafrikansk engelska
4.10.1 Språkinställning i Gnome
• es_ES : Spanska i Spanien
• es_AR : Spanska i Argentina
Om du normalt vill att datorn ska prata svenska
• fr_CA : Franska i Kanada
(eller något annat språk) med dig så kan du stäl• zh_CN : Kinesiska i Kina
la om språk från inloggningsrutan innan du loggar
• zh_TW : Kinesiska i Taiwan
in. (Du får en fråga om det bara är under just denObservera att språk och land inte nödvändigtna session du vill använda detta språk eller om du
vis har samma tvåbokstavsförkortning när orden
vill ändra så att detta blir det normala för dig.)
är liknande. T. ex. har danska språket koden »da«
och Danmark har »DK«.
Till detta lägger man en punkt och en tecken4.10.2 Hur en locale ser ut
kodning, t. ex. .iso8859-1 eller .utf8, så en fullEn angivelse av locale kan se ut i stil med ständig locale kan se ut som sv_SE.utf8. (Det
pt_BR.iso8859-1 vilket betyder brasiliansk por- finns även locales som har andra slags namn.)
I många fall spelar det ingen roll vilket land
tugisiska kodat enligt Latin-1.
man
anger. Det är nog t. ex. knappast många proFörst kommer en beteckningen för vilket språk
gram
som beter sig olika om man har talat om att
det är. I förra kapitlet, på sidan 32, finns en lista
man
vill
ha rikssvenskt eller finlandssvenskt beöver några av dessa språk. Till detta fogas även vilteende.
Det
betyder inte att man kan sätta ihop
ket land det gäller. Landskoderna kan man t. ex.
känna igen från toppdomänerna på Internet där
4
3 Vilket
40
betyder igelkott på ryska!
I det sammanhanget används dock inte förkortningen GB
för Great Britain, utan .uk för United Kingdom, och .us används inte så mycket.
4.11. Olika teckenkodningar i Emacs
lands- och språkbeteckningar hur som helst i en
locale. Med kommandot locale -a listas alla giltiga locales.
istället för »total«, utan det räcker med att en gång
för alla tala om vilket språk du ha.
Ett viktigt undantag är sortering. Du bör tänka
på hur sorteringar sker och veta hur du kan ställa
om LANG för att få olika sorteringar, inklusive den
4.10.3 Att sätta om locale temporärt
rent »datoriska« med LANG=C som inte tar hänsyn
Med LANG=hlocalei hkommandoi kan man utföra till något särskilt språks sorteringsregler.
ett kommando med en annan locale än sin norDet gäller förstås också att sätta teckenkodmala. I exemplen i figur 4.8 kan man se hur det ningen rätt! Om en fil är lagrad i Latin-1 betypåverkar både vanlig output och felmeddelanden. der det bl. a. att koden 224 där betyder à och att
Ändrar man sin normala locale före inloggning koden 227 betyder ã. (Se figur 4.3!) Om dessa
kommer det alltså inte bara att påverka det gra- tecken ska sorteras likadant så måste sort till att
fiska gränssnittet, utan även vad skalkommandon börja med veta teckenkodningen. Annars har den
skriver ut.
ingen anledning att behandla 224 och 227 likadant.
4.10.4
Sortering
Hur text ska sorteras är språkspecifikt. På svenska
sorterar vi åäö i slutet av alfabetet, medan t. ex.
tyskarna som också använder ä och ö sorterar dessa som a och o.
I uppgift 3.35 sorterade du svenska ord men
med engelska språkinställningar fick du en sortering där åäö sorteras som aao i stil med hur vi
sorterar tecken som éèêë likadant som vanligt e.
Genom att sätta om LANG ändras dock även hur
sort sorterar. Här sorteras samma rader två gånger, först på svenska och sedan på engelska:
$ LANG=sv_SE.utf8 sort /tmp/fil
citron
zebra
åsna
äpple
$ LANG=en_US.utf8 sort /tmp/fil
äpple
åsna
citron
zebra
Sorteringsreglerna för en del språk kan vara rätt
komplicerade. Ibland vill man sortera bara för att
föra ihop likadana rader, och då är det onödigt att
använda så komplicerade sorteringsregler som naturliga språk ofta har. Då kan man använda en särskild locale »C« vilket ger enklast möjliga sortering.
Raderna jämförs bara byte för byte enligt de numeriska koderna. (Det innebär t. ex. att stora och
små bokstäver sorteras olika.) Om det är en stor
fil kan man märka att en sådan enklare sortering
kan gå mycket snabbare.
4.10.5
När använda detta?
I de flesta fall kommer du inte behöva bry dig om
dessa språkinställningar. Du kommer knappast ha
nån nytta av att köra wc på nederländska en specifik gång så att det står »totaal« i summeringsraden
4.10.6
Hur ett skalkommando ser ut
Med denna nya ingrediens i skalkommandona är
vår nuvarande sanning om hur de ser ut så här: Ett
helt kommandorör består av en mängd kommandon avskilda av lodstreck (|). Det första kommandot kan följas av <hfilnamni och det sista kommandot kan följas av >hfilnamni.
Varje individuellt kommando i ett sådant
kommandorör kan enligt tidigare se ut som
hkommandordi hväljarei hargumenti, men dessutom kan det alltså tillkomma LANG=hnåntingi i
början. Detta hör då bara till just det kommandot och inte till ett helt kommandorör. Om man i
ett längre kommandorör vill ha en sortering med
t. ex. locale C blir det alltså
... | LANG=C sort | ...
och det är då bara sort som körs med annan locale
än den normala. Kommandon tidigare och senare
i kommandoröret påverkas inte.
4.11
Olika teckenkodningar i
Emacs
Emacs kan läsa och skriva filer med flera olika
teckenkodningar. Ofta kan den gissa rätt på vilken teckenkodning en viss fil är skriven med. Alla
buffertar i Emacs får innehålla vilka tecken som
helst som Emacs kan hantera. Det är först när
man försöker spara en fil som det krävs att alla
tecken i bufferten finns med i den teckenkodning
som man ska spara filen med. Om det inte är så
talar Emacs om detta och låter en välja en annan
teckenkodning.
Man kan också tala om explicit vilken teckenkodning man vill använda innan man sparar
genom att använda Options Multilingual Environment
Set Coding Systems For Saving This Buffer .
Till vänster i informationsraden anger Emacs
vilken teckenkodning som i första hand ska användas när en viss buffert sparas till fil (1 = ISO8859-1, U = Unicode, . . . ).
41
4. TECKENREPRESENTATION
$ ls xx
ls: cannot access xx: No such file or directory
$ LANG=fr_FR.utf8 ls xx
ls: impossible d'accéder à xx: Aucun fichier ou dossier de ce type
$ date
Thu Sep 13 12:45:04 CEST 2012
$ LANG=es_ES.utf8 date
jue sep 13 12:45:13 CEST 2012
$ LANG=fi_FI.utf8 wc *.txt
4552 35715 235593 ivt2-svenska.txt
40
317
2106 rummet.txt
3594 26461 148488 wonderland.txt
8186 62493 386187 yhteensä
Figur 4.8: Några exempel på hur olika kommandon ger olika texter ifrån sig beroende på vilken locale som gäller.
(I det sista exemplet märks skillnaden bara på »yhteensä« istället för »total«.)
I samma meny finns även besläktade kommandon, t. ex. för att tala om uttryckligen vilken teckenkodning en fil har ifall Emacs gissar fel.
4.12
Att konvertera mellan
teckenkodningar
Ett program som konverterar mellan teckenkodningar är iconv. Det kan användas som
iconv -f latin1 -t utf-8 foo.txt för att
konvertera filen foo.txt från Latin-1 till UTF8
och skriva ut resultatet till standard output.
Om man utelämnar argumentet tas input istället från standard input.
Man kan ange namn på teckenkodningarna på
lite olika sätt. Istället för »latin1« kan man skriva
t. ex. »iso-8859-1« eller »iso8859-1«.
Default, dvs. vad som händer om man inte säger till om något annat, är att ens normala teckenkodning (enligt ens locale) används, så om man inte använder väljaren -f omvandlar iconv från ens
vanliga teckenkodning, och om man inte använder väljaren -t omvandlar iconv till ens vanliga
teckenkodning.
Ett annat sätt att konvertera är att öppna filen
i Emacs och så spara den igen efter att man ställt
om teckenkodning.
4.13
Att skriva tecken i Emacs
4.13.1
C-x 8
I synnerhet finns C-x 8 RET med vilket man
kan skriva vilka tecken som helst genom att ange
deras Unicode-namn. Riktigt alla tecken finns inte i fonten som Emacs använder. Okända tecken
visas som rutor med hexadecimala koder i.
4.13.2
Inputmetoder
Om man vill skriva en hel text med något annat
skriftsystem, som t. ex. ryska eller kinesiska tecken, så kan man använda en särskild inputmetod.
Inputmetoden definierar vilka tecken som genereras när man trycker på olika tangenter. Funktionen Select Input Method finns i menyn Options
Multilingual environment och där finner man även ett
kommando för att beskriva en viss inputmetod
(C-h I).
Det finns olika slags inputmetoder. T. ex.:
• Prefix- och postfixmetoder där man framförallt kan skriva bokstäver med accenter genom att skriva något särskilt före
respektive efter bokstaven. Inputmetoden
german-prefix gör t. ex. så att "A genererar
Ä men även så att "s genererar ß.
• Tangentbordslayouter. Om man t. ex. kan
layouten på ett vanligt ryskt tangentbord, kan man använda inputmetoden
cyrillic-jcuken för att tangenterna ska generera det tecken som tangenten på motsvarande position ger på ett ryskt tangentbord.
• Translitterering. Med cyrillic-translit
trycker man t. ex. på tangenterna »Shostakovich« för att skriva »Xostakoviq«.5
• För att skriva ideogram, t. ex. kinesiska, finns
det dels inputmetoder där man först anger
ordets fonetik, dels sådana där man först
Om du behöver skriva in tecken som du inte
hittar på tangentbordet så finns det flera Emacskommandon som börjar med prefixet C-x 8 och
följs av ett eller flera tecken. Med C-x 8 / O kan
5 Detta följer en engelsk translitterering. På svenska skulle
man t. ex. skriva Ø och med C-x 8 L kan man man oftast skriva »Sjostakovitj«, och i vetenskapliga sammanhang translittererar man »Šostakovič«.
skriva £.
42
4.14. Hos oss
anger några av delarna i det grafiska tecknet.
I båda fallen finns det i allmänhet flera möjliga tecken som kan passa in. Man får upp en
lista över sådana från vilken man får välja.
4.14
Hos oss
På våra GNU/Linux-datorer använder vi
en_US.UTF-8 som normal locale, dvs. amerikansk engelska kodad med UTF-8.
43
Inlupp 4: Teckenkodningar
Redovisning
som sistaargument till cp för att kopiera den till
aktuell katalog.)
När ett skalkommando efterfrågas ska du ge evenÖppna nu din kopia av filen i Emacs. Emacs
tuell output från det kommandot också.
känner igen vad det är för teckenkodning och viGör först cd introduktion-till-datateknik sar därför alla bokstäver rätt.
och ha sen den katalogen som aktuell katalog vid
alla skalkommandon du ger i denna labb!
Uppgift 4.4 Vad är det för teckenkodning och
Skicka svar i mail till Per.
hur kan du se i Emacs att det är det?
Tecken och bytes
Härnäst gör du Options
Multilingual Environment
(eller använder motsvarande kortkommando C-x RET f) för
Hittills har du bara räknat ord och rader med wc,
att ange vilken teckenkodning du vill att denna fil
men det kommandot kan även räkna tecken. Välska ha och svarar utf-8. Spara filen.
jaren -c har traditionellt använts till detta, men
Du har nu omvandlat den filen till UTF-8. (Koleftersom den funnits med sedan urminnes tider
la för säkerhets skull med cat i terminalen också.)
så räknar den helt enkelt antal bytes, vilket var
Öppna /local/kurs/ids/rysk.txt i Emacs.
samma sak då.
Som man kan gissa av namnet så innehåller den
en text på ryska med kyrillisk skrift. Emacs gissar
Uppgift 4.1 Ge ett kommando för att räkna andock fel på vad det är för kodning av den filen så
tal bytes i filen konto.txt som ligger i din hemtecknen ser inte alls ryska ut.
katalog.
I ett sånt här läge finns det ett särskilt kommando för att genast öppna om samma fil men då tala
(Missa nu inte vad som står om aktuell katalog i
om vad det är för teckenkodning i den. Sök upp
reglerna under Redovisning ovan! Du ska inte stå
det kommandot i Emacs-menyerna i samma mei den katalog där den filen ligger, men ändå skriva
ny som nyss.
en korrekt relativ sökväg.)
Använd det kommandot för att öppna om denMed nyare kodningar som UTF-8 kan antana fil. Ange den teckenkodning i ISO 8859-serien
let bytes och tecken skilja, så i operativsystemet
som är till för kyrillisk skrift. Sök upp information
GNU har wc fått en ny väljare som förstår sig på
på nätet om vilken teckenkodning det är.
sånt och verkligen räknar tecken (characters).
Se efter med wc --help vad den väljaren heUppgift 4.5 Vad heter den teckenkodningen
ter.
och var hittade du information om den?
Set Coding Systems
For Saving This Buffer
Uppgift 4.2 Ge ett kommando som räknar antal
tecken i den där filen konto.txt.
Uppgift 4.6 Hur visas den teckenkodningen i
informationsraden i Emacs?
Uppgift 4.3 Hur stor skillnad blev det i bytes
och tecken? Varför just så stor? Vad är det det
finns så många av?
Uppgift 4.7 Sök upp första ordet i den filen i
Google. Vad heter denna figur på svenska? (Du
kan t. ex. använda dig av Wikipedia, där det i
vänsterspalten finns länkar till motsvarande sidor
på andra språk.
Teckenkodningar i Emacs
Det finns en textfil i katalogen ~ellen/
fotografier. Gör cat på den i skalet. (Använd
komplettering för att se vad filen heter.)
Några tecken kommer inte att visas rätt, eftersom den filen inte är kodad enligt UTF-8. Kopiera den filen till din kurskatalog. (Använd ».«
44
Öppna härnäst filen /local/kurs/ids/small.
txt. Här är det flera tecken som inte visas som det
var tänkt.
Det står nånting om latin-1 i texten. Normalt
så har du sett att Emacs känner igen sånt av sig
självt, men kanske inte i detta fall? Öppna om
filen som en latin-1-fil istället.
Inputmetoder i Emacs
Uppgift 4.8 Hur gjorde du det?
Det torde bli klart läsligare, men inte helt.
Uppgift 4.9 Det är ett tecken som fortfarande
inte är rätt. Hur visas det i Emacs-bufferten nu?
(Det blir inte bra om du kopierar tecken till ditt
svar. Då får du samma tecken där också, men det
kanske visas på något helt annat sätt i det program
jag läser ditt mail med. Så skriva av beteckningen
istället.)
Det saknade tecknet var tänkt att vara ett C,
som inte finns i latin-1! Tydligen är denna fil inte
kodad med Latin-1 trots allt, utan med en teckenkodning som är ungefär som Latin-1. (Och
det förklarar att Emacs inte kände igen det som
Latin-1.)
Uppgift 4.10 Nästa gissning är att filen är kodad med en vanlig teckenkodning under Microsoft Windows som liknar Latin-1. Vad heter den?
Prova denna gissning genom att öppna om filen
på det sättet.
Detta stämde visst.
Uppgift 4.11 Hur visas denna teckenkodning i
informationsraden i Emacs?
Inputmetoder i Emacs
C-x C-+
C-x C-C-x C-0
Zooma in
Zooma ut
Normalläge
Figur 4.9: Zoomkommandon i Emacs. Den sista är
med siffran 0, inte bokstaven O.
Uppgift 4.12 Hur lyder den information du får
upp om det där sista tecknet i förra uppgiften (Z)
när du använder detta?
Öppna en ny fil vinter.txt (i kurskatalogen)
och skriv »Snögubbe:« där. Använd C-x 8 RET
för att därefter skriva Unicode-tecknet SNOWMAN . Spara filen.
Om du inte är mycket skarpsynt så har du användning för kommandon i figur 4.9 för denna
uppgift:
Uppgift 4.13 Hur många knappar har snögubben och hur många snöflingor är det?
Kör i skalet ett kommando od -c vinter.txt
som visar innehållet i filen, byte för byte. ASCIItecken visas som tecken och övrigt visas som tal
(skrivna oktalt).
Uppgift 4.14 Hur många bytes behövs för bokstaven ö? (Dvs. hur många bytes ligger mellan n
och g som tar en byte var?)
Uppgift 4.15
gubben?
Hur många bytes behövs för snö-
Öppna en ny fil uttal.txt där du ska skriva
en kort fonetisk skrift med uttalsangivelser enligt Uppgift 4.16 Sist kommer \n. Vad betyder det?
IPA, nämligen »læNgwIdZ« (= language).
Några av tecknen finns inte på tangentbordet.
Lös detta genom att ange en särskild inputme- iconv
tod i Emacs med Options Multilingual Environment
Select Input Method . Välj metoden ipa. Att du har
detta aktiverat visas med IPA i informationsraden. Uppgift 4.17 Ge ett iconv-kommando för att
direkt skriva ut Ellens fil i uppgift 4.4 kodad med
Nu tolkar Emacs det du skriver på ett lite spe- UTF-8 i terminalen. (Använd hennes oförändrade
ciellt sätt som ska underlätta att skriva IPA. T. ex. original – inte din kopia.)
kan tecknet æ skrivas med »ae«. Med C-h I (versalt I!) får du en beskrivning av en inputmetod. Filen /local/kurs/ids/nordic-authors.txt
Tryck på retur för att få just denna inputmetod innehåller namnen på några nordiska författare,
beskriven så får du veta hur du kan skriva de öv- listade en per rad med efternamn först.
riga speciella tecknen i denna text. Märk medan
du skriver att det i ekoarean framgår vad det finns Uppgift 4.18 Vilken teckenkodning använder
för möjligheter.
den filen?
Mer tecken i Emacs
Uppgift 4.19 Ge ett skalkommando som sparar
en ny fil authors.txt som innehåller /local/
kurs/ids/nordic-authors.txt omvandlad till
UTF-8.
Om man placerar markören på ett visst tecken
i Emacs kan man få information om det teck(Om du har gjort rätt ska filen se rätt ut t. ex.
net med C-u C-x = (tre tecken). I informationen
man får upp står bland annat tecknets namn.
om du tittar på dess innehåll med cat.)
45
INLUPP 4: TECKENKODNINGAR
Olika locale
Uppror!
Uppror! är en science fiction-roman från 1975
av pseudonymen Ferdinand Fitzschkloff.6 Den
sprids med författarens godkännande på http:
//runeberg.org/uppror/ på webben.
Gå dit i en webbläsare och välj (download)
Uppgift 4.20 Vad är koden för landet Sverige?
(långt ner på sidan) och sen All OCR-text för att
Uppgift 4.21 Vad är koden för språket svenska? ladda ner en textfil uppror.txt med bokens inUppgift 4.22 Vad blir därmed en fullständig lo- nehåll. Välj »Save File« istället för att öppna den i
Emacs. Dessa filer är skapade med OCR (Optical
cale för svenska i Sverige skrivet med UTF-8?
Character Recognition) från inskannade boksidor,
Uppgift 4.23 Med locale -a kan man lista al- så det kan ha blivit fel ibland.
la giltiga locales. Hur många sådana finns det?
Flytta denna uppror.txt till din kurskatalog
och
öppna den sedan i Emacs. Precis efter det
Uppgift 4.24 Vilka giltiga locales finns det för
U
på
informationsraden som anger Unicode står
USA här? Vilka språk använder dessa?
här (DOS). Det visar att denna fil har nyradstecUppgift 4.25 Vilka giltiga locales finns det för ken så som DOS och MS Windows gör, dvs. med
Sverige här?
CRLF.7
Genom att klicka med musen på detta »DOS«
Uppgift 4.26 Ge ett kommando för att visa din
så
byter du vilken nyradskonvention du vill ha i
nya fil authors.txt sorterad med svensk locale.
filen. Prova det!
Se noga upp med att du skriver locale-namnen rätt
i dessa uppgifter! Skriver man fel blir det inget felmeddelande, utan bara ett felaktigt resultat!
På svenska har traditionellt v och w sorterats
som samma bokstav, men numer vacklar bruket.
Senaste upplagan av Svenska Akademiens ordlista sorterar w för sig, som en egen bokstav, men
ibland samsorteras fortfarade v och w, i synnerhet
för namn.
Uppgift 4.27 Hur beter sig svensk sortering här
vad gäller v och w?
Uppgift 4.28 Ge ett kommando för att sortera
samma författarlista med dansk sortering! Vilka
skillnader blir det då jämfört med svensk sortering?
Du har sedan förra kapitlet en fil rummet.words
i din kurskatalog.
Uppgift 4.29 Ge ett kommando som ger en lista
över de tio sista orden i en svensksorterad lista
över raderna i rummet.words, samt resultatet.
Några rader där är dubbletter. Det finns ett
kommando uniq som man kan använda som filter för att ta bort dubblettrader som kommer efter varann i en input.
Uppgift 4.31 Vad står det då istället för »DOS«?
Vad betyder det?
Klicka igen. Då ska den parentesen helt försvinna och ersättas med bara ett kolon. Då har
du ställt in att du vill ha normala nyrader (som i
Unix) i den filen. Eftersom filen på disk inte är sån
så räknas den bufferten som osparad. Spara den.
Uppgift 4.32 När du sparade filen ska du ha fått
det gamla innehållet sparat i en backupfil. Kontrollera att du har den. Vad heter den?
Uppgift 4.33 Ge ett kommando som talar om
hur många bytes det är både i din nya uppror.txt
och den backupfil som skapades (som har kvar de
gamla nyraderna). (Använd ett jokeruttryck.) Kan
du förklara varför skillnaden blev just så stor?
Uppgift 4.34 Hur lyder den första raden i
uppror.txt som innehåller texten »special«? Ge
kommando som tar fram detta, samt kommandots resultat.
Kontrolltecken
Ett exempel på kontrolltecken i ASCII är tecken
nummer 27 = Escape = [ESC].
Uppgift 4.30 Ge ett kommando som sorterar
Man kan lägga in det tecknet i en buffert i
raderna i rummet.words (på svenska), tar med Emacs genom att trycka C-q ESC . Kommandot
varje ord bara en gång, och listar de tio sista orden C-q läser nämligen in ett tecken och lägger in
av detta. (Visa som vanligt både ditt kommando det i bufferten, även om det är ett sådant tecken
och dess resultat.)
6=
I den listan ska inga dubbletter finnas. (Däremot kan samma ordform finnas som två olika ordklasser. Då är ju raderna inte dubbletter!)
46
Gunnar Gällmo.
man tittar på samma fil i Emacs under MS Windows
skulle det inte stå nåt särskilt, för då skulle det vara det normala. Däremot skulle Emacs skriva (Unix) där för filer som
bara har [LF] för nyrad.
7 Om
Kontrolltecken
Figur 4.10: Ett par vikare, tagna från Wikipedia, som i sin tur har tagit bilden från The Fisheries and Fisheries
Industries of the United States av George Brown Goode (1887).
som normalt skulle ha en annan betydelse – q i
C-q står för quote. (Normalt så har ESC istället
effekten att fungera som Meta- till nästa tecken i
Emacs, så ESC > är som M->.)
Öppna en ny fil konstig.txt i Emacs och skriv
där ett ESC-tecken följt av exakt [42m (fyra tecken till efter ESC-tecknet).
Uppgift 4.35 Hur visas det ESC-tecknet i
Emacs?
Prova att förflytta dig tecken för tecken över
detta speciella tecken för att se att det verkligen
är ett tecken där.
Uppgift 4.36 Prova cat konstig.txt i en terminal. Vilken effekt hade den konstiga raden för
terminalfönstret?
Detta är ett exempel på specialfunktioner som
kontrolltecken kan ha, i detta fall med på hur terminalen beter sig.
* * *
Kopiera /local/kurs/ids/djur.txt till din
kurskatalog och öppna den i Emacs. Där står två
kolumner med djurnamn med ett TAB-tecken
mellan sig. I den sista raden är första ordet så
långt så att andra kolumnen visas längre till höger, men där som på de övriga raderna är det
bara ett TAB-tecken mellan kolumnerna. Med
cut -f 2 djur.txt får du ut bara de svenska
namnen.
Skriv till »fox« + TAB + »räv«.
Uppgift 4.37 Hur många TAB-tecken lades in
när du tryckte på TAB?
Uppgift 4.38 Ge exempel på något cutkommando som nu inte ger önskat resultat.
Emacs vet inte att detta var tänkt att bli en
fil med TAB-kolumner, utan gör som den brukar
med TAB-tangenten, dvs. går fram till »nästa ställe« (beroende på hur raden ovan ser ut) oavsett
hur många tecken som den behöver lägga in i bufferten för att komma dit.
För att verkligen lägga in exakt ett TAB-tecken
behöver du använda C-q igen.
Lägg till två till rader med djur: »ringed seal« =
»vikare« och »bat« = »fladdermus«.
Fixa till så att alla rader stämmer och kolla så att
cut -f 2 djur.txt ger alla svenska namn (och
inget annat).
Uppgift 4.39 Om du använder det där Emacskommandot för att lägga in ett tecken (som
t. o. m. kan vara ett kontrolltecken) i en buffert
till att lägga in RET (retur), hur visas det tecknet
då i bufferten?
Uppgift 4.40 Varför just så? Var står det om
detta i kompendiet?
Uppgift 4.41 Tryck M-x i Emacs. Då hamnar
du i minibufferten och får skriva namnet på ett
Emacskommando där. Skriv »whitespace-mode«
(du kan använda komplettering) och avsluta med
RET. Vad verkar detta ha för effekt?
47
INLUPP 4: TECKENKODNINGAR
Snart slut
Uppgift 4.42 Klipp ut de svenska namnen från
din djur.txt och avstava dem med avstava från
förra kapitlet. Ange såväl ditt kommando som
dess resultat.
Uppgift 4.43 Ge ett skalkommando som lägger
texten »räksmörgås« i en ny fil shrimp.txt kodad
enligt Latin-1.
Om du gjort rätt ska du t. ex. kunna titta på den
på samma sätt som i uppgift 4.17.
Uppgift 4.44 Hur många tecken är det på den
näst sista raden i /local/texts/jabberwocky?
Ge skalkommando och dess resultat.
Uppgift 4.45 Räkna för hand också för att se att
din lösning till förra uppgiften stämmer. Hm, är
det inte ett ifrån? Hur kommer det sig?
Uppgift 4.46 Hitta på en uppgift som kan lösas
genom att kombinera minst två kommandon som
vi har haft med hittills i ett rör. Lös din egen uppgift.
Om du vill kan du använda dig av vilka filer
som helst i din kurskatalog eller i /local/kurs/
ids/ som input. (Trots att detta kapitel handlar
om teckenkodningar behöver den sista uppgiften
inte ha med sånt att göra.)
48
Kapitel 5
Dokumentation och textbearbetning i
skalet
5.1
Dokumentation
Även när det finns bra dokumentation till program, vilket tyvärr inte alltid är fallet, är inte alltid
lätt att veta var man ska finna den. Det finns olika
system för hur program som vara dokumenterade. För större interaktiva program som Firefox eller Emacs väntar man sig i första hand att finna en
hjälpfunktion inne i programmet för att få hjälp
eller för att få läsa dokumentationen, och man
kan leta efter en hjälpmeny. För ett kommando
för kommandoraden som cat eller ls har du tidigare sett att det är standard i GNU att de skriver ut en hjälptext om de får en särskild väljare
--help, men den huvudsakliga dokumentationen
finns istället separat.
5.1.1
Info
I figur 5.1 visas en uråldrig man-sida, nämligen
den för wc i Unix version 7, från 1979! Den visar
flera kännetecken för man-sidor. De är indelade i
olika standardiserade avsnitt – här ses name, synopsis, och description.
Andra avsnitt som också ofta förekommer är
bl. a. see also med hänvisningar till annan dokumentation, author för att ange programmets författare, history för att säga något om programmets
historia och bugs för att ange kända hittills ofixade
fel i programmet.
Detta är en ovanligt kort man-sida, framförallt
för att det finns så få väljare. Många kommandon
har många väljare som behöver varsin längre förklaring.
5.1.3
Kommandosyntax
Avsnittet synopsis behöver du kunna tolka, och
där används samma konventioner som ni sett tidigare i avsnitt 3.9 på s. 28.
Eftersom både -lwc och name ... står inom
hakparenteser i figur 5.1 behöver de inte vara
med, så det kortaste anropet av kommandot är
bara wc . (Att använda wc utan argument är rimligt att göra som en del i ett kommandorör, då
5.1.2 man-sidor
input hämtas från standard input.)
Punkterna visar att det kan förekomma flera
Det traditionella Unix-sättet att dokumentera
program man kör i skalet är istället med man-sidor förekomster av det som står före punkterna. Man
och en del program som du använder kommer ba- kan alltså köra programmet som wc hnamei eller
wc hnamei hnamei eller ha ännu fler namn. Att
ra vara dokumenterade på det sättet.
dessa
namn ska vara namn på filer framgår i den
Man-sidor är linjära texter med början, mitten
följande
beskrivningen.
och slut, utan länkar. Även program som har doBeteckningen -lwc visar i kompakt form att
kumentation i Info brukar ofta ha man-sidor också, men då är oftast dokumentationen i Info både väljarna -l, -w och -c finns tillgängliga så att en
eller flera av dessa kan användas. Ofta listas inutförligare och lättare att förstå.
Det finns ett uppslag (en man-sida) för var- te väljarna upp i synopsen, utan det står bara
je program, systemanrop, osv., och ett komman- [OPTION]... där, och så listas de olika möjliga
do man med vilket man tittar på dessa. För att väljarna upp i beskrivningen istället.
se man-sidan för programmet cat ger man t. ex.
Dessutom kan tecknet | användas för att visa
kommandot man cat .
alternativ och {} som parenteser.
I GNU, som vi kör, skrivs sådan dokumentation
i ett format som heter Texinfo, från vilket man
kan producera bland annat tryckta böcker och Info, som enklast läses i Emacs. Det är ett slags hypertext, dvs. texter med länkar till andra texter (i
stil med webben).
49
5. DOKUMENTATION OCH TEXTBEARBETNING I SKALET
WC(1)
NAME
WC(1)
wc - word count
SYNOPSIS
wc [ -lwc ] [ name ... ]
DESCRIPTION
Wc counts lines, words and characters in the named files, or in the
standard input if no name appears. A word is a maximal string of characters delimited by spaces, tabs or newlines.
If the optional argument is present, just the specified counts (lines,
words or characters) are selected by the letters l, w, or c.
WC(1)
Figur 5.1: Man-sidan för wc i Unix v7 (1979)
Istället för att t. ex. ge två synopsrader till ett
kommando, som
5.3 cut
Ibland vid textbearbetning använder man textfiler
där varje rad består av flera fält. Med kommanUsage: cp [OPTION]... SOURCE DEST
or: cp [OPTION]... SOURCE... DIRECTORY dot cut kan man plocka ut ett eller flera fält därifrån. Fälten avdelas av ett visst tecken. Normalt
är det TAB-tecknet, men man kan använda ett ankan man till exempel ge samma informanat tecken och ge en väljare till cut som talar om
tion på en rad, med uttrycket cp [OPTION]...
vilket tecken som används.
{ SOURCE DEST | SOURCE... DIRECTORY }.
Vilket eller vilka fält den ska skriva ut visar man
med väljaren -f med argument. Fälten är numrerade från vänster till höger så att det första fältet
5.1.4 Bläddring
är fält 1.
Oftast är man-sidan flera sidor lång och man får
(Det går också att plocka ut vissa tecken från
då bläddra fram en sida i taget. Man kan bläddra en rad istället för vissa fält, t. ex. tecken 4–6. Se
framåt med mellanslag och avsluta med q. Mer dokumentationen om du behöver detta!)
hjälp om bläddringen får man med h.
Se även paste!
5.2
Skalkommandon för
texthantering
I avsnitt 2.1.8 finns en genomgång av några skalkommandon som gör saker med texter. Här är en
del som tillkommit sedan dess, och en del nytt.
De flesta av dessa program är radorienterade,
dvs. behandlar sin input en rad i taget. Det man
vill sortera med sort ska t. ex. ligga uppdelat en
enhet per rad.
Kommandon som läser text från standard input
brukar oftast tolka argument som filnamn och om
de får argument så läser de input från dessa filer istället. Detta gäller t. ex. cut, head, more,
sort, tail, uniq och wc.
50
5.4 echo
Kommandot echo ger tillbaka sina argument som
output: echo htexti. . .
Det kan vara praktiskt när man vill ge en specifik text som input till ett kommando utan att
behöva skapa en fil med den texten.
Med väljaren -e tolkas vissa sekvenser som börjar med bakstreck speciellt, i synnerhet kan man
då skriva nyrad med \n (som i newline).
$ echo -e 'citron\npäron\nbanan' | sort
banan
citron
päron
5.5. grep
av gh. Detta matchar textsträngarna »agh«, »argh«,
»arrgh«, »arrrgh«, »arrrrgh«, osv.
Blanda inte ihop denna användning av * med
5.5 grep
jokerbetydelsen! I reguljära uttryck betyder inte
Kommandot grep söker efter en visst mönster * nånting för sig själv, utan det modifierar bara
som ges som första argument. Med flera argument det som står precis innan.
Med »l[aeiouyåäö]*t« matchar man därför
ska övriga vara filer att leta i.
alla
strängar som börjar med l, slutar med t och
Bara de rader där den sökta texten finns med
däremellan
innehåller godtyckligt många bokstäkommer ut.
ver
i
den
uppräknade
listan. Detta matchar t. ex.
Tidigare har vi bara sökt efter en fix text, men
»lat«,
»låt«,
men
även
korta
»lt« och långa »layout«.
några tecken är speciella och kan användas för
Genom
att
skriva
de
två
tecknen .* kan man
mer avancerade sökningar. Dessa söksträngar kalmatcha
vad
som
helst.
Det
betyder
ju vilket teclas för reguljära uttryck och tecknen med särskild
ken
som
helst
(punkten),
hur
många
gånger som
betydelse kallas metatecken. På engelska heter det
helst
(asterisken).
Därmed
matchar
t.
ex. uttrycregular expression vilket ibland kortas till bara regket
a.*ö
vad
som
helst
som
börjar
med
a och sluexp eller regex. Även på svenska talar man ofta
tar
med
ö,
t.
ex.
»adjö«,
»atollö«
eller
»a4!
ö«.
om regexpar.
Observera
att
det
även
matchar
bara
»aö«
–
det
Flera av dessa tecken är speciella i skalet, så ofta
behöver man sätta sökmönstret inom citattecken »godtyckliga« kan vara ingenting alls.
när man kör grep för att inte skalet ska tolka texten speciellt.
5.5.4
5.5.1
Ett godtyckligt tecken: .
Punkten (.) matchar ett tecken vilket som helst.
(Det fyller alltså samma funktion som frågetecken
gör i jokeruttryck.) Så med b.x matchas »box«
och »bmx«, samt även t. ex. »b%x« och »b x« (mellanslag är ett tecken det också).
5.5.2
Ett speciellt tecken: [ ] och [^ ]
Om man ska beteckna ett tecken som man vill
ställa mer krav på använder man hakparenteser.
Genom att räkna upp tecken inom [] kan man
ange ett av dessa tecken, så [Dd]ator matchar
»Dator« och »dator« och [hmt]um[lm]a matchar
»humla«, »humma«, »mumla«, »mumma«, »tumla« och »tumma«.
Detta liknar hur man använder [] som jokertecken. Precis som då kan man även ange intervall, så [0-9] betyder samma som [0123456789].
Vill man ta med bindestrecket så får man sätta det
först eller sist: [._-] matchar ».«, »_« eller »-«.
En skillnad är att i reguljära uttryck kan man
använda ^ först för att negera en uppräkning av
tecken, så [^@] matchar vilket tecken som helst
utom @, [^aouå] matchar vilket tecken som helst
som inte är a, o, u eller å och [^0-9] matchar
vilket tecken som helst som inte är en siffra.
Ankring med ^ och $
Metatecknen ^ och $ betyder början av raden respektive slutet av raden.
Så med t. ex. ^xyz hittar man rader som börjar
med xyz (radbörjan följt av »xyz«) och med xyz$
hittar man rader som slutar med xyz (»xyz« följt
av radslut).
Dessa båda tecken matchar alltså inget tecken
alls på egen hand, utan ställer bara krav på var det
övriga i uttrycket ska befinna sig. Man säger att
dessa ankrar ett reguljärt uttryck.
5.5.5
Några väljare till grep
Tidigare har ni sett exempel på väljarna -c och -i
till grep.
En annan användbar väljare till grep är -v som
vänder på betydelsen av kommandot och istället
tar fram alla rader som inte innehåller ett visst sökmönster.
Kommandot grep visar ju hela de rader som innehåller det man sökt efter. Med väljaren --color
markeras den del av raden som matchade ens sökmönster i en särskild färg.
5.6 more
Kommandot more visar upp sin output i terminalen sida för sida så att användaren kan bläddra i
texten, som i man-sidor med man. Det är ofta an5.5.3 Repetition med *
vändbart som sista delen i ett kommandorör som
Med asterisken * efter något så säger man att det- producerar text, så det är inte ovanligt med komta får förekomma godtyckligt många gånger i det mandon som slutar med »| more«. Det finns däreman söker efter. Godtyckligt många gånger kan mot ingen vits med att stoppa in more före | eller
vara noll, en, två, tre, . . . , gånger.
> eftersom dess output då inte kommer att hamna
Så om man söker efter t. ex. »ar*gh« så bety- i terminalen.
der det ett a följt av godtyckligt många r följt
En typisk användning ser ut som
51
5. DOKUMENTATION OCH TEXTBEARBETNING I SKALET
(Bakstrecket har specialbetydelse i skalet, så
det
argumentet måste sättas inom citattecken.)
$ sort birds.txt | more
Man kan inte byta ut ett tecken mot flera, t. ex.
byta ut alla »x« mot »ks«. I själva verket så är det
enstaka bytes som byts ut, så tr fungerar inte bra
med tecken som lagras i flera bytes, så som t. ex.
åäö i UTF-8, vilket begränsar dess användbarhet!
5.7 paste
(Vi kommer se ett annat sätt att göra utbyten i
Kommandot paste gör det omvända från cut, ge- text senare.)
nom att det sätter ihop fält från olika filer till en
fil.
5.10 uniq
Raderna i input till uniq kommer ut igen utom
de rader som är likadana som raden innan.
Kommandot sort läser in rader från sin input och
Det är vanligt att kombinera detta med sorteskriver ut samma rader som output, men i en sor- ring som ... sort | uniq .... Genom att sorterad ordning.
tera det som kommer in till uniq så kommer alla
Kommandot tar hänsyn till vilka språkinställ- likadana rader att ha hamnat direkt efter varandra
ningar man har för att göra sortering enligt något så att uniq kan ta bort så mycket som möjligt.
visst språks konventioner. Ifall ens syfte bara är
Ofta använder man detta när det egentligen inatt föra samman likadana rader så kan man göra te spelar någon roll vad det är för ordning, bara
LANG=C sort som gör den enklaste sortens sor- det är någon ordning så att likadana rader har förts
tering, i storleksordning efter tecknens numeriska samman.
koder. (Då sorteras till exempel lilla a och stora A
Med -c räknar uniq hur många rader det var
olika.)
också.
Med väljaren -n sorterar den istället numeriskt,
Med väljaren -u skriver uniq bara ut de rader
efter hur stora tal skrivna i siffror är. Då hamnar som var unika. Dvs. istället för att behålla en av
t. ex. »9« före »10« vilket det inte gör när man jäm- flera likadana rader så behåller det inga rader alls
för tecken för tecken.
i sådana fall.
Väljaren -d är motsatsen till -u. Nu skrivs bara
de rader ut som var duplicerade.
5.8 sort
5.9 tr
Kommandot tr byter ut tecken i input. Första argumentet räknar upp tecken som ska bytas ut och
andra argumentet räknar upp vad dessa ska bytas
mot.
$ echo 'Sju sjuka sjuksköterskor' | tr s z
Sju zjuka zjukzköterzkor
$ echo 'uppercase vowels' | tr aeiou AEIOU
UppErcAsE vOwEls
En del kontrolltecken kan skrivas som sekvenser som börjar med bakstreck i argument till tr,
däribland nyrad med \n och TAB med \t.
$ cat tripp
tripp
trapp
trull
$ tr '\n' / <tripp
tripp/trapp/trull/
52
$ cat gumma.txt
en
liten
liten
liten
gumma
med
en
liten
liten
katt
$ uniq gumma.txt
en
liten
gumma
med
en
liten
katt
$ uniq -c gumma.txt
1 en
3 liten
1 gumma
1 med
1 en
2 liten
1 katt
5.10. uniq
$ uniq -u gumma.txt
en
gumma
med
en
katt
$ uniq -d gumma.txt
liten
liten
I exemplen ovan används uniq på rader som
inte är sorterade. Det är ganska sällan man har
användning för det. Vanligare är att man vill göra
en lista över vilka ord som förekommer i den där
filen, och då får man lov att sortera raderna först:
$ sort gumma.txt
en
gumma
katt
liten
med
$ sort gumma.txt
2 en
1 gumma
1 katt
5 liten
1 med
$ sort gumma.txt
gumma
katt
med
$ sort gumma.txt
en
liten
| uniq
| uniq -c
| uniq -u
| uniq -d
53
Inlupp 5: Textbearbetning i skalet
Redovisning
Skicka mail till Per med svaren.
När det inte står annat ska svaret fås fram genom ett eller flera skalkommandon. Ange både
det resultat du fick och de kommandon du gav
för att få fram det. Försök att bara använda ett
kommando(rör) när det går.
Tänk på att använda citattecken runt argument
som innehåller tecken som $[]*?\ och mellanslag
så att de inte tolkas särskilt av skalet!
Info
Välj Help Read the Emacs Manual i Emacs.
Du hamnar i ett system som heter Info där
dokumentationen till många program finns, däribland Emacs.
Nu ser du Info-dokumentet om Emacs. Observera att det står »Info« i parentesen i informationsraden. Till vänster om det står »(emacs) Top«. Det
visar att Info-dokumentet du läser heter »emacs«
och du befinner dig överst i det.
Efter förtugget kommer en lång meny. Cirka 60
rader ner (gå ner en sida med PageDown eller C-v
vid behov), under rubriken »Fundamental Editing
Commands«, så ser du bland annat menyalternativet Basic. I beskrivningen till höger beskrivs detta
som »The most basic editing commands.« Välj Basic och sen Erasing från den meny du då får upp.
Då har du fått fram lite samlad information om
hur man kan ta bort text i Emacs.
De olika noderna i ett Info-dokument hänger
ihop i ett träd. Överst ser du nu en särskild rad
där det bland annat står »Up: Basic«, dvs. uppåt i
trädet ligger den sida du var i senast, från vilken
du gick »ner« till denna sida. På samma rad som
»Up« står finns även »Next« och »Prev« (= previous) i en tänkt läsordning för avsnitten. Du kan
följa dessa länkar genom att klicka på dem eller
på symbolerna
,
,
. Gå till föregående,
dvs. »Moving Point«.
Förutom att man kan röra sig framåt och bakåt i den tänkta läsordningen kan man även backa till varifrån man kom (»last«), oavsett hur man
kom därifrån. Det gör man med vänsterpilen
på samma rad. Tryck på den nu så kommer du
54
Figur 5.2: Från xkcd av Randall Munroe. http://
xkcd.com/912/
tillbaka till »Erasing Text«, eftersom det var där
du var senast.
En del Info-dokument har register (index) som
man når med
. Säg att du undrar vad det
står om stavningskontroll i Emacsdokumentationen. Välj »spelling« i registret. Du kommer till ett
avsnitt med rubriken »Checking and Correcting
Spelling«.
Uppgift 5.1 Ett kommando som nämns där beskrivs som »Check and correct spelling of the the
word at point«. Vad ska man trycka i Emacs för
att utföra detta?
Prova! Byt buffert till slaskbufferten *scratch*
och skriv ordet speling där (felstavat på detta
man
sätt!) följt av kommandot för att kontrollera stavTitta på dokumentationen för shuf.
ningen. Du får upp ett antal rättelseförslag att välja mellan. Förslag 0 är »spelling«. Tryck på 0 för att Uppgift 5.7 Ge ett kommando för att skriva ut
raderna i din saga.txt i slumpvis ordning.
rätta din felstavning till detta.
Uppgift 5.2 Vad var förslag 4?
Uppgift 5.8 Ge ett kommando för att skriva ut
talen 1–5 i en slumpvis ordning.
Uppgift 5.3 Enligt den fortsatta beskrivningen
av kommandot så gör det ibland något annat än
att kontrollera ett ord. Vad och när?
Uppgift 5.9 Ge ett kommando för att skriva ut
en slumpvis frukt från /local/kurs/ids/frukt.
Gå tillbaks till Info igen. Ett sätt är att byta till
den särskilda bufferten med namnet *info* på
något av de vanliga sätten för att byta buffert. Ett
annat är att använda C-h i som alltid tar en till
Info.
I informationsraden står det »(emacs) Spelling«.
Det heter den nod i Info som du tittar på just nu.
Den första delen inom parentes visar vilket Infodokument det ingår i.
Tryck på d för att komma till huvudkatalogen
(directory) över Info-dokument. Här finns det en
lång meny där de kommandon som är dokumenterade i Info finns med. (Om man inte har startat
Info tidigare så är det hit man kommer om man
trycker C-h i. Annars kommer man tillbaka till
där man var senast.)
Uppgift 5.4 Vad heter den Info-nod du nu tittar på? (Svaret står i informationsraden, med en
förstadel (dokumentetets namn) inom parentes.)
Lös dessa tre uppgifter med bara ett kommando, utan kommandorör. Du får lov att använda
olika väljare till shuf.
När man söker framåt med C-s beter sig Emacs
lite speciellt i Info. När den inte hittar någon mer
förekomst på den sida man är på kan den söka
vidare i nästa sida i samma Info-dokument.
Uppgift 5.10 Hur hittar du i Info information
du behöver för att lösa nästa två uppgifter?
Uppgift 5.11 Använd ls för att ge en listning av
filerna i din kurskatalog i storleksordning, med den
största filen först.
Uppgift 5.12 Använd ls för att ge en listning
av filerna i din kurskatalog i storleksordning med
den minsta filen först. (Omvändningen av förra
uppgiften.)
man
Slå upp sort här. Istället för att leta efter det
Kommandot cal ger en liten kalender. Detta
i den långa långa menyn så använd kortkommankommando är inte så intressant i sig, men används
dot m för att välja nåt från menyn och svara sort.
här som exempel för att ni ska slå upp och tolka
en man-sida. (Det är det enda sätt som programUppgift 5.5 Vad heter den Info-nod du nu tittar met finns dokumenterat.)
på?
Notera att med »upp« nu kommer du inte tillbaka till huvudkatalogen. Du följde en genväg
som gick en bit ner i trädet, och går du uppåt nu
kommer du till andra kommandon som också har
med sorterade filer att göra.
Uppgift 5.6 Ett av de andra kommandona heter
shuf. Vilka övriga kommandon tas upp i samma
kapitel om sorterade filer?
Bokstäver som kommandon: Normalt i Emacs
så läggs skrivbara tecken som a, b, c, d in i bufferten när man trycker på dem. Men i speciella
Emacslägen som Info där man ändå inte skriver in
text så är kortkommandona ofta bara en bokstav.
Genom att trycka h i Info får du veta mer om
hur man manövrerar i Info helt från tangentbordet.
Uppgift 5.13 Hur lyder synopsraden i mansidan till cal?
Uppgift 5.14 Det finns ett antal väljare man kan
ge till kommandot cal. Efter dessa kan det följa
argument. Om man ger tre argument, vad betecknar då det första, andra respektive sista argumentet? Ge ett exempel på ett anrop med tre argument och vad du får för svar då.
Uppgift 5.15 Om man ger två argument, vad
betecknar då det första respektive det andra argumentet? Ge ett exempel på ett anrop med två
argument och vad du får för svar då.
I denna man-sida kallas argumenten för parameters och det står om hur »a single parameter« tolkas.
Uppgift 5.16 Hur tolkas alltså argumentet om
man bara ger ett argument till cal? Detta framgår
även av synopsraden. Hur?
55
INLUPP 5: TEXTBEARBETNING I SKALET
Uppgift 5.17 Ge en kalender för föregående,
nuvarande och nästa månad, med måndag som
förstadag i veckorna.
med ett led till i ett kommandorör. Ge också ett
alternativt svar där båda kraven finns i samma reguljära uttryck.
Uppgift 5.18 Kommandot seq kan få ett till tre
argument. Kolla dokumentationen för att se hur
detta beskrivs. Där finns det tre synopsrader, en
för varje antal argument. Hur lyder dessa tre rader?
Uppgift 5.32 Hur många verb slutar på något
annat än a?
Uppgift 5.19 Detta hade kunnat skrivas med
bara en synopsrad istället med hakparenteser ungefär (men inte riktigt) så som det var för cal.
Hur skulle beskrivningen av seq se ut i så fall?
(Ledning: Ett av de möjliga argumenten måste
alltid vara med, så det ska inte så inom några [].)
Uppgift 5.20 Ge ett kommando för att lista åttans tabell: 8, 16, 24, 32, 40, 48, 56, 64, 72, 80,
ett tal per rad.
Uppgift 5.33 Samma som uppgift 5.24, men lös
den med grep utan att använda väljaren -v denna
gång!
Uppgift 5.34 Vilka verb har x som sjätte bokstav (som t. ex. förhäxa)?
Uppgift 5.35 Vilka verb börjar med k och slutar
med iera?
Uppror!
Uppgift 5.21 Ge en lista över alla tal 1–10 000
som är delbara med 7 och som innehåller »765«
när man skriver ut det.
I resultatet ska bland annat 7651 (= 7 × 1093)
ingå.
På sidan 46 sparade du en version av uppror.txt
med normal Unix-markering för nyrad. Den ska
du använda nu.
Alla uppgifter i detta avsnitt använder sig av
den filen. Prova gärna kommandona i detta avsnitt med väljaren --color till grep också.
Verb
Uppgift 5.36 Vilka rader innehåller två j med
exakt två tecken mellan sig?
Dessa frågor gäller den fil verb.txt som du använt i tidigare uppgifter.
Uppgift 5.22 Vilket eller vilka verb innehåller
»stp« i sig?
Uppgift 5.37 Vilka rader innehåller minst tre
siffror i rad?
Uppgift 5.38 Vilka rader innehåller minst två
siffror?
Uppgift 5.23 Vilka verb innehåller fa följt av ett
godtyckligt tecken följt av a?
Uppgift 5.39 Vad finns det för rad som innehåller ett komma som följs av något annat tecken än
mellanslag?
Uppgift 5.24 Hur många verb innehåller inte a
alls? (Använd väljaren -v till grep!)
Uppgift 5.40 Vad finns det för rader som innehåller minst två frågetecken?
Uppgift 5.25 Hur många verb innehåller åtminstone någon av bokstäverna j eller y?
Uppgift 5.41 Vad finns det för rader som inte
innehåller något mellanslag men ändå är minst 15
tecken långa?
Uppgift 5.26 Vilka verb innehåller y följt av
godtyckligt många s följt av e?
(I ett par av orden är det inga s alls, dvs. y följs
direkt av e.)
Uppgift 5.27 Vilka verb innehåller både j och y,
i den ordningen (men kanske med andra tecken
däremellan)?
Uppgift 5.28 Vilka verb innehåller både j och
y?
Uppgift 5.29 Hur många verb innehåller j men
inte y?
* * *
Slå upp grep i Info. Sök upp information om
ordsökning där. (Det finns en särskild väljare för
sånt.)
Uppgift 5.42 Vad hette Info-noden du hittade
denna väljare på?
Uppgift 5.43 Hur bar du dig åt för att hitta till
den Info-noden?
Uppgift 5.44 Vilka rader i uppror.txt innehåller ordet »dröm«?
Uppgift 5.45 Vilka rader innehåller de fyra bokstäverna »dröm« i rad men ändå inte ordet
Uppgift 5.31 Vilka verb slutar på y och börjar »dröm«? (Det kan vara rader på vilka det står
på g? Ge ett svar där du utökar förra uppgiften »mardröm« eller »drömmar« t. ex..)
Uppgift 5.30 Vilka verb slutar på bokstaven y?
56
I fält
»Det var en afton i början av maj«
Här görs en antal uppgifter med /local/kurs/
ids/rummet.words som du antas ha gjort en kopia av tidigare. Det är alltså filen där det ligger ett
ord per rad, tillsammans med ordklassbeteckning.
Uppgift 5.53 Ge ett kommando som sorterar
raderna i rummet.words så att lika rader hamnar
i följd och sedan räknar hur många det är av varje slags rad. (Du behöver inte ange resultatet av
detta kommando.)
Uppgift 5.54 Utöka föregående kommandorör
så att du därefter sorterar detta resultat i nummerordning och ger en tio-i-topp-lista med de vanligaste orden först.
I fält
I filen /local/kurs/ids/eulang.tsv finns lite
data om de officiella EU-språken i en fil med
TAB-separerade fält. (Filnamnsändelsen tsv används ibland för »tab separated values«.)
Det första fältet ger en kod för språket, det andra ger ungefärligt antal modersmålstalande (inte bara i EU),1 det tredje ger språkets namn på
svenska, det fjärde ger språkets namn på engelska
och det femte och sista fältet ger vilket år språket
blev ett officiellt EU-språk.
Uppgift 5.46 Ta fram en sorterad lista över språkens engelska namn.
Uppgift 5.47 Ta fram alla fält utom språkkoden,
sorterade efter antal talare.
Uppgift 5.48 Vilket språk har lägst antal talare?
Ta bara fram dess namn på engelska.
Uppgift 5.49 Ange språkkoderna för alla språk
som var officiella EU-språk redan 1958.
Uppgift 5.50 Vilka år har något språk blivit officiellt EU-språk? (Ge ett svar som listar dessa år
i tidsordning, utan dubbletter.)
Uppgift 5.51 Vilka år har fler än ett språk blivit
nya officiella EU-språk?
Uppgift 5.52 Vilka år har exakt ett språk blivit
nytt officiellt EU-språk?
Numerisk sortering ger normalt de lägsta talen
först, men sök upp en väljare till sort som gör
att man får omvänd sorteringsordning än den annars ger! (Använd den korta versionen av denna
väljare.)
Här räknades även skiljetecken som egna ord,
så flera av de vanligaste »orden« kommer att vara
sådana.
Uppgift 5.55 Vilka prepositioner förekommer
bara en gång i rummet.words?
Du kan anta att det räcker med att söka upp rader som innehåller »prep« för att hitta prepositioner. (Som tur är finns inte ord som »preparat« eller
»upprepa« i texten, vilket skulle ge falska träffar.)
Uppgift 5.56 Modifiera uppgift 5.54 så att resultatet skrivs ut med ett snedstreck (/) istället
för TAB mellan ord och ordklass.
I rummet.words finns olika rader som
de
de
art
pron
så grafordet »de« kan både vara artikel och pronomen. Det finns flera sådana ord.
Uppgift 5.57 Vilka ord i rummet.words förekommer där med minst två olika ordklasser?
Räkna m med skript
Du ska skriva ett skalskript countm.sh som räknar
m och M i en fil. Låt skalskriptet börja så här:
#!/bin/bash
echo Antal m:
grep -c m $1
1 Uppgifterna är ihopsamlade på en höft och ska tas med
några nypor salt.
57
INLUPP 5: TEXTBEARBETNING I SKALET
Där det brukar stå ett filnamn står här istället
$1. Det är nytt och betyder något man gett som
argument till skriptet. Då kan man skriva t. ex.
$ bash countm.sh rummet.txt
Antal m:
28
Antal M:
3
Antal rader utan m eller M:
4
Och för att räkna i en annan fil är det bara att
ge ett annat filnamn när man kör skriptet.
Uppgift 5.58 I exemplet ovan skrivs några fler
rader ut än vad den givna början av skriptet gör.
Utöka skriptet så att det ger alla dessa uppgifter.
Hur lyder din countm.sh nu?
Uppgift 5.59 Vad får du för output om du kör
ditt skript med /local/kurs/ids/wonderland.
txt som argument?
Ordsegmentering
Uppgift 5.60 Ett (för) enkelt sätt att dela upp
en textfil i ord är att byta ut alla mellanslag mot
nyradstecken. Använd det för att i en fil GNU-w1
lägga en sorterad ordlista med alla ord som förekommer i filen GNU i din kurskatalog. (Ta bort
dubbletter.)
Uppgift 5.61 Titta igenom resultatet i Emacs
och nämn vilka problem du kommer på med detta enkla sätt att dela upp en text i ord.
Ditt och datt
Uppgift 5.62 Ge en lista över alla årtal som förekommer i us-states.txt. (Ge varje årtal bara
en gång oavsett hur många gånger det förekommer i filen.)
Uppgift 5.63 Om man skulle göra en stavningsreform så att man ersatte alla z med s, vad skulle
det bli för verb som nu stavas olika som då skulle
stavas likadant i verb.txt?
$2, $3, . . . : Är det kanske så att om man ger
fler argument till skriptet så kan man komma åt
dem med $2, $3, osv.? Javisst är det så. Prova gärna!
58
Uppgift 5.64 Vilka delstater kom med i USA i
mars något år enligt us-states.txt?
Uppgift 5.65 Gör en lista för hur ofta de olika
månaderna förekommer i datumen i us-states.
txt.
Resultatet skulle kunna börja med med
7 01
3 02
som visar att det finns sju fall av »01« (= januari)
och tre fall av »02« (= februari).
Uppgift 5.66 Skapa en fil us-states-rev.
txt som innehåller samma två kolumner som
us-states.txt, men i omvänd ordning.
Kapitel 6
Versionskontroll och Emacs
Det blir två olika ämnen idag.
6.1
Versionskontroll
Versionskontrollsystem är system som kan hantera flera olika versioner av dokument. Flera personer kan ändra i dokumenten och det går att få
fram vilka tidigare versioner som helst och se vilka ändringar som gjorts när.
Det finns flera olika versionskontrollsystem
som har olika för- och nackdelar. Ett mycket vanligt är CVS. En fördel med det är just att det används så mycket. I labben ska ni få använda Subversion (SVN) som är ett senare system som är
likt CVS men har en del viktiga förbättringar.
Några exempel på modernare versionskontrollsystem är Bazaar, Git och Mercurial.
Databasen där alla versioner av filerna i ett projekt ligger kallas ett repositorium (repository). Att
ta fram filer därifrån kallas att checka ut dessa filer. Då får man en arbetskatalog (working directory) där man kan göra de ändringar man vill. Efter att man gjort en ändring som ska in i projektet
så checkar man in den filen igen så hamnar den
versionen i repositoriet. Alla versioner som checkats in kan tas fram i efterhand, så man kan be om
t. ex. hur en viss version såg ut den 1 april förra
året.
Ofta går det att nå ett repositorium över nätet
så att personer som ska medverka i ett projekt inte
behöver ha konto på samma dator.
Även om versionskontrollsystem framförallt
används för programmering så kan det med fördel användas även i andra sammanhang där flera
personer skriver något tillsammans.
Även för sådant man skriver själv är det användbart, bland annat för att kunna gå tillbaka till tidigare versioner.
Figur 6.1: Såna här missöden händer lätt om flera
personer kan ändra i samma filer.
lösa sådana problem är en av huvudfunktionerna
för versionskontrollsystem.
I en del versionskontrollsystem så låser man
normalt en fil man ska göra ändringar i så att andra inte får göra ändringar samtidigt.
I de flesta system nu är det dock oftast inget
större problem med samtidiga ändringar. Om en
användare gör en ändring i början av en fil samtidigt som en annan ändrar i slutet av samma fil
så kan systemet slå ihop dessa ändringar av sig
självt. Systemet vet nämligen vilken version av
dokumentet som de olika användarna har utgått
ifrån.
Bara om ändringarna sker på samma ställe behövs hjälp med att reda ut det. Då visar systemet
båda versionerna och en människa får reda ut läget.
6.1.2
6.1.1
Om flera ändrar samtidigt
Om flera personer har skrivrättigheter i samma
katalog där de tillsammans sköter några filer blir
det lätt olyckor, som i figur 6.1. Att undvika och
Kommandon
Oftast är det ett enda skalkommando med vilket man kan göra allt som ett versionskontrollsystem kan göra, genom att ge det olika argument.
För CVS heter kommandot cvs och för Subver59
6. VERSIONSKONTROLL OCH EMACS
sion heter det svn, och liknande för andra system.
Första argumentet till svn är ett underkommando
till det. Med svn help får man hjälp.
Men Emacs känner igen vilka filer som tas om
hand av något versionskontrollsystem och vilket
system det är och gör mycket av det där automatiskt åt en, eller med kommandon i en meny
Tools Version Control .
Man kan använda samma kommandon i Emacs
oavsett vilket versionskontrollsystem man använder. Emacs känner igen vilket system som har
hand om just dina filer. Ibland används förkortningen VC för Version Control, och det ingår i en
hel del namn på Emacskommandon.
6.2
Emacs
Det står en hel del om emacs i avsnitt 2.2 på s. 18.
Här är några ytterligare delar.
På s. 63–64 följer sedan den refcard.pdf som
följer med Emacs1 med tips om kortkommandon
och annat. (Men en hel del av dessa är sådana som
ni antagligen inte kommer att behöva.)
6.2.1
Kommandon
I Emacs finns en stor mängd kommandon som gör
olika saker med texten. När man trycker på en
tangent i Emacs eller väljer något från en meny så
utförs något av dessa kommandon. När man trycker på <home> eller C-a utförs t. ex. ett kommando move-beginning-of-line som går till början
av raden och när man väljer Tools Spell Checking
Spell-Check Buffer i menyerna utförs ett kommando
ispell-buffer.2
Normalt behöver man inte veta vad dessa namn
på kommandona är. När man lär sig att man kan
gå till början av raden med C-a så behöver man
därför inte lära sig vad det kommando som utförs
heter. Men när man vill använda ett kommando
som inte finns i menyerna och som det inte finns
ett kortkommando för så kan man ändå utföra
kommandot genom att använda M-x och sedan ge
kommandots namn (följt av RET ). I sådana lägen
kan man använda TAB för att få komplettering.
En del kommandon finns det inget snabbkommando för.
6.2.2
Att få hjälp
I tabell 6.1 visas några av de kommandon som
börjar med C-h. För flera av dessa ska man efter kommandot tala om vad man vill ha hjälp
med. Efter C-h c eller C-h k får man t. ex.
trycka på en tangent för att få fram hjälp om
just den. Om man t. ex. undrar vad som händer om man trycker på C-l kan man fråga med
C-h k C-l och om man undrar vad kommandot
som utförs med C-x C-b heter kan man använda
C-h c C-x C-b.
Många av dessa kommandon finns förstås i menyn Help också.
Hur fortsätter kommandot?
Dessutom kan man använda C-h i ett flerteckenskommando för att se hur det kan fortsätta.
Med C-x C-h får man t. ex. veta vad det finns för
kommandon som börjar med C-x (så som t. ex.
C-x C-f och C-x C-s ) och med C-c C-h kan
man se vad som börjar med C-c osv.
Ofta så visas den hjälp man får fram i en särskild buffert *Help*. Många speciella buffertar
i Emacs har sådana namn som börjar och slutar
med asterisk.
Istället för C-h kan man även använda <f1>
som hjälptangent, dvs. funktionstangenten F1.
6.2.3
Manualen
Som ni har sett förut finns den huvudsakliga dokumentationen till Emacs i Info, och med Help
Read the Emacs Manual kan man gå till den dokumentationen.
(Ofta finns dessa manualer även på nätet
i flera olika format. På http://www.gnu.org/
software/emacs/ finns t. ex. länkar till Emacsdokumentationen.)
6.2.4
Musen
De tre knapparna kallas i Emacs Mouse-1,
Mouse-2 och Mouse-3 från vänster till höger, så
mouse-2 är mittknappen (på scrollhjulet).
Även dessa kan kombineras med Ctrl och liknande. T. ex. är ytterligare ett sätt att välja buffert
i Emacs C-Mouse-1 . (Prova!)
6.2.5
Lägen
Det som här kallas lägen i Emacs kallas också moder som mer direkt översättning av modes. Emacs
använder olika slags lägen för olika slags filer. Det
är alltid en major mode och kan även vara flera
minor modes som ändrar beteendet på olika sätt.
1 Med fullständig sökväg /local/share/emacs/24.3/
Olika lägen kan ha olika kortkommandon, olika
etc/refcards/refcard.pdf
menyer, olika färgläggning av bufferten, osv. Pre2 Flera gånger i denna text kallas tangenttryckningen för
ett kommando det också, så det kan stå »använd kommandot fixtangenten C-c inleder ofta kommandon som är
C-a«. Förhoppningsvis ska det inte leda till sammanblandning. speciella för olika lägen. Ni har t. ex. sett exempel
Man kan få hjälp av olika slag i Emacs med olika
kommandon som börjar med C-h (där h står för
help).
60
6.2. Emacs
Tabell 6.1: Några C-h-kommandon.
Tangent
Kommando
Beskrivning
C-h
C-h
C-h
C-h
C-h
C-h
C-h
C-h
describe-key-briefly
describe-key
apropos-command
info
describe-function
where-is
describe-mode
help-with-tutorial
Talar om vilket kommando en viss tangent utför
Talar även om vad detta kommando gör
Hittar ett kommando som innehåller något visst i sitt namn
Går in i Info
Beskriv ett namngivet kommando
Hitta snabbkommando för ett visst kommando.
Beskriver aktuellt Emacs-läge.
Lär dig en del Emacs-kommandon.
c
k
a
i
f
w
m
t
på att när ni editerade ett skalskript så hamnade
Emacs i ett annat läge.
Med C-Mouse-3 får man fram en meny för aktuellt läge. Man kan också hålla klicka på lägets
namn i informationsraden för att få upp den meny som är speciellt för ett visst läge.
6.2.6
Prefix-argument
Vissa kommandon i Emacs kräver ett argument som läses in i minibufferten efteråt. Efter
C-x C-f får man t. ex. ange vilken fil det är man
vill öppna.
Det går dessutom alltid ge ett numeriskt prefixargument direkt före ett kommando. Olika kommandon behandlar detta argument på olika sätt.
Med M-f går man t. ex. framåt ett ord. Genom att
ge ett argument så går man istället fram så många
ord.
Ett sätt att ge prefix-argument är att trycka på
siffror medan man håller Ctrl eller Meta intryckt.
Så med M-1 M-2 M-f går man därmed framåt 12
ord. Eftersom själva kommandot innehåller Meta
är det mesta praktiskt att använda Meta med siffrorna också denna gång, så behöver man aldrig
lyfta på Alt-tangenten. Om man istället skulle gå
fram tolv tecken med C-f använder man lämpligen C-1 C-2 C-f istället, så slipper man lyfta
på Control-tangenten. I Emacslägen där man inte skriver in text, t. ex. Dired som är läget man
får när man öppnar en katalog i Emacs, räcker det
med att trycka på siffertangenter utan Ctrl eller
Meta.
Ett annat sätt är att använda C-u och sen skriva
vanliga siffror: C-u 1 2 M-f. Om man ger bara
C-u utan några siffror räknas det som 4, och två
C-u som 16. Det ger ett enkelt sätt att t. ex. »gå
ner några rader« ( C-u <down> ) eller »gå upp rätt
många rader« (C-u C-u <up> ).
Vissa kommandon bryr sig bara om ifall de
får ett argument eller inte, men inte vad argumentet är. Ett exempel är kommandot M-q
(fill-paragraph) som bryter om det stycke man
står i. Om man ger det ett prefixargument så läg-
ger det dessutom in dubbla mellanslag här och där
så att det ska bli en rak högermarginal. När man
bara ska ge ett prefixargument vilket som helst
och det inte spelar roll vad det är brukar man använda C-u, så t. ex. C-u M-q .
Ett annat exempel på det som ni sett var på
sidan 45 när ni fick använda C-u C-x =. Själva
kommandot där var alltså bara C-x =, men det
användes med ett argument för att det skulle bete
sig lite annorlunda.
6.2.7
Sökningar
Inkrementella sökningar med C-s (framåt) och
C-r (bakåt) har ni redan gjort. Om man tar med
minst en versal i söksträngen så görs det skillnad
på versaler och gemener, men inte annars, så med
foo hittar man såväl »foo« som »Foo« som »FOO«,
men med söksträngen Foo hittar man bara »Foo«
och inte t. ex. »foo« eller »FOO«.
Man kan söka efter reguljära uttryck genom att
lägga till Meta också, dvs. med C-M-s och C-M-r.
6.2.8
Regionen
På sidan 20 stod det om regionen i Emacs. Ett till
sätt att markera en region från tangentbordet är
att hålla ner skifttangenten medan man förflyttar
sig med piltangenterna.
Många kommandon beter sig lite annorlunda
ifall man har en aktiv markerad region. Kommandot M-$ som du använt för att stavningskontrollera ett ord kontrollerar t. ex. hela regionen om man
har en aktiv sådan.
61
Inlupp 6: Versionskontroll och Emacs
Versionskontroll
Bland relaterade kommandon finns bland annat
sådana för att lista en fils historia (logg), ta fram
Ge i din kurskatalog skalkommandot
tidigare versioner, med mera.
Din fil ids6.txt är inte inlagd i Subversion basvn co svn://stp/ids15/username
ra för att den ligger i samma katalog. Lägg in den
filen också (trots att du än så länge bara svarat på
där username är ditt användarnamn.
Du blir tillfrågad om ett lösenord. (Inget några få frågor.
För detta behöver du göra C-x v v två gånger.
kommer att ekas när du skriver in lösenordet.) Det är inte ditt vanliga inloggningslösenord Första gången registrerar du filen och andra gångutan ett annat som står i filen /local/svn/ en checkas den verkligen in. Gör så! (Loggmeddelandet kan vara tomt om du vill.) När du är
passwords/username som bara är läsbar för dig.
I denna nya katalog som heter som ditt använ- klar ska det stå »SVN:« med siffror efter i infordarnamn finns en fil som heter foo.txt. Öppna mationsraden.
Flytta även dina svar från de två förra kapitlen
den i Emacs. I informationsraden står det »SVN«
till
denna katalog under namnen ids4.txt och
för att visa att denna fil sköts av Subversion.
ids5.txt
(oavsett om du är klar med dem elAnvänd C-x 5 f i Emacs för att öppna en ny
ler
inte)
och
checka in de filerna. Om du inte
fil ids6.txt i samma katalog för att skriva svaren
har
börjat
med
den senare så checka in en tom
på följande frågor i.
fil ids5.txt! Eventuella kompletteringar till desUppgift 6.1 Vad gjorde detta kommando (tyd- sa labbar ska du senare lägga in i dessa filer och
checka in. Tillbaks till foo.txt:
ligen)?
Tillbaks till foo.txt. Byt ut ordet »gamla« mot
»nya« där och spara. Nu skiljer sig den version
du har i din katalog från den incheckade. Använd
Tools Version Control Compare with Base Version för att
i kompakt form få se skillnaderna.
Det viktigaste Emacs-kommandot för versionskontroll är C-x v v för att checka in en fil, så det
är det värt att lära sig kortkommandot för. Använd det nu! Innan själva incheckningen sker får
du skriva ett loggmeddelande om vad det är för
en ändring du gjort. Gör så.
Uppgift 6.2 Vad är kortkommandot för att avsluta detta loggmeddelande?
Uppgift 6.3 Hur fick du reda på vad kortkommandot var? Kommer du på nåt annat sätt du
kunde ha fått reda på det?
. . . is not in a version controlled directory.: Varning! Om du får denna varning tillsammans med
en fråga om »VC backend« så avbryt med C-g ! Då
har du försökt checka in en fil någonannanstans än
i din Subversion-katalog.
Tools
Version Control
Uppgift 6.4 Använd
Show History för att få se loggen för foo.txt. Hur
lyder den?
För varje version står det »r« följt av siffror för
att visa vilken revidering den versionen hör till.
Uppgift 6.5 Vad är det för siffror för den tidigaste versionen av den filen?
Hitta ett kommando i Tools Version Control för
att visa en annan version och välj den där allra
första versionen. (Skriv bara siffrorna utan inledande »r«.)
Uppgift 6.6 Så vad stod det i denna första version av denna fil?
Checka in din ids6.txt innan du går vidare!
Nu kan du antingen gå vidare med resten av detta
kapitel, eller komplettera tidigare labbar du inte
är klar med. Följ avsnittet »Klar för idag?« på slutet innan du slutar för idag hursomhelst!
Referenskort till Emacs på de två följande sidorna
62
+
GNU Emacs Reference Card
(for version 24)
Starting Emacs
To enter GNU Emacs 24, just type its name: emacs
Leaving Emacs
suspend Emacs (or iconify it under X)
exit Emacs permanently
C-z
C-x C-c
Files
read a file into Emacs
save a file back to disk
save all files
insert contents of another file into this buffer
replace this file with the file you really want
write buffer to a specified file
toggle read-only status of buffer
C-x
C-x
C-x
C-x
C-x
C-x
C-x
C-f
C-s
s
i
C-v
C-w
C-q
Getting Help
The help system is simple. Type C-h (or F1) and follow the directions. If you are a first-time user, type C-h t for a tutorial.
remove help window
scroll help window
C-x 1
C-M-v
apropos: show commands matching a string
describe the function a key runs
describe a function
get mode-specific information
C-h
C-h
C-h
C-h
a
k
f
m
Motion
entity to move over
character
word
line
go to line beginning (or end)
sentence
paragraph
page
sexp
function
go to buffer beginning (or end)
scroll
scroll
scroll
scroll
scroll
Multiple Windows
backward
C-b
M-b
C-p
C-a
M-a
M-{
C-x [
C-M-b
C-M-a
M-<
to next screen
to previous screen
left
right
current line to center, top, bottom
goto line
goto char
back to indentation
forward
C-f
M-f
C-n
C-e
M-e
M-}
C-x ]
C-M-f
C-M-e
M->
C-v
M-v
C-x <
C-x >
C-l
M-g g
M-g c
M-m
Killing and Deleting
entity to kill
character (delete, not kill)
word
line (to end of)
sentence
sexp
backward
DEL
M-DEL
M-0 C-k
C-x DEL
M-- C-M-k
forward
C-d
M-d
C-k
M-k
C-M-k
kill region
copy region to kill ring
kill through next occurrence of char
C-w
M-w
M-z char
yank back last thing killed
replace last yank with previous kill
C-y
M-y
Error Recovery
Marking
abort partially typed or executing command C-g
recover files lost by a system crash
M-x recover-session
undo an unwanted change
C-x u, C-_ or C-/
restore a buffer to its original contents
M-x revert-buffer
redraw garbaged screen
C-l
set mark here
exchange point and mark
C-@ or C-SPC
C-x C-x
set mark arg words away
mark paragraph
mark page
mark sexp
mark function
mark entire buffer
M-@
M-h
C-x C-p
C-M-@
C-M-h
C-x h
Incremental Search
search forward
search backward
regular expression search
reverse regular expression search
C-s
C-r
C-M-s
C-M-r
Query Replace
select previous search string
select next later search string
exit incremental search
undo effect of last character
abort current search
M-p
M-n
RET
DEL
C-g
Valid responses in query-replace mode are
Use C-s or C-r again to repeat the search in either direction. If
Emacs is still searching, C-g cancels only the part not matched.
c 2015 Free Software Foundation, Inc. Permissions on back.
interactively replace a text string
M-%
using regular expressions
M-x query-replace-regexp
replace this one, go on to next
replace this one, don’t move
skip to next without replacing
replace all remaining matches
back up to the previous match
exit query-replace
enter recursive edit (C-M-c to exit)
SPC or y
,
DEL or n
!
^
RET
C-r
When two commands are shown, the second is a similar command for a frame instead of a window.
delete all other windows
C-x 1
C-x 5 1
split window, above and below
C-x 2
C-x 5 2
delete this window
C-x 0
C-x 5 0
split window, side by side
C-x 3
scroll other window
C-M-v
switch cursor to another window
C-x o
C-x 5 o
select buffer in other window
C-x 4 b
C-x 5 b
display buffer in other window
C-x 4 C-o C-x 5 C-o
find file in other window
C-x 4 f
C-x 5 f
find file read-only in other window
C-x 4 r
C-x 5 r
run Dired in other window
C-x 4 d
C-x 5 d
find tag in other window
C-x 4 .
C-x 5 .
grow window taller
C-x ^
shrink window narrower
C-x {
grow window wider
C-x }
Formatting
indent current line (mode-dependent)
indent region (mode-dependent)
indent sexp (mode-dependent)
indent region rigidly arg columns
indent for comment
insert newline after point
move rest of line vertically down
delete blank lines around point
join line with previous (with arg, next)
delete all white space around point
put exactly one space at point
fill paragraph
set fill column to arg
set prefix each line starts with
set face
TAB
C-M-\
C-M-q
C-x TAB
M-;
C-o
C-M-o
C-x C-o
M-^
M-\
M-SPC
M-q
C-x f
C-x .
M-o
Case Change
uppercase word
lowercase word
capitalize word
uppercase region
lowercase region
M-u
M-l
M-c
C-x C-u
C-x C-l
The Minibuffer
The following keys are defined in the minibuffer.
complete as much as possible
TAB
complete up to one word
SPC
complete and execute
RET
show possible completions
?
fetch previous minibuffer input
M-p
fetch later minibuffer input or default
M-n
regexp search backward through history
M-r
regexp search forward through history
M-s
abort command
C-g
Type C-x ESC ESC to edit and repeat the last command that
used the minibuffer. Type F10 to activate menu bar items on
text terminals.
GNU Emacs Reference Card
Buffers
select another buffer
list all buffers
kill a buffer
C-x b
C-x C-b
C-x k
Transposing
transpose
transpose
transpose
transpose
characters
words
lines
sexps
C-t
M-t
C-x C-t
C-M-t
Spelling Check
check spelling of
check spelling of
check spelling of
toggle on-the-fly
current word
all words in region
entire buffer
spell checking
M-$
M-x ispell-region
M-x ispell-buffer
M-x flyspell-mode
Tags
find a tag (a definition)
M-.
find next occurrence of tag
C-u M-.
specify a new tags file
M-x visit-tags-table
regexp search on all files in tags table
M-x tags-search
run query-replace on all the files
M-x tags-query-replace
continue last tags search or query-replace
M-,
Shells
execute a shell command
execute a shell command asynchronously
run a shell command on the region
filter region through a shell command
start a shell in window *shell*
M-!
M-&
M-|
C-u M-|
M-x shell
Rectangles
copy rectangle to register
kill rectangle
yank rectangle
open rectangle, shifting text right
blank out rectangle
prefix each line with a string
C-x
C-x
C-x
C-x
C-x
C-x
r
r
r
r
r
r
r
k
y
o
c
t
C-x
C-x
C-x
C-x
C-x
M-/
a
a
a
a
a
g
l
i g
i l
e
Abbrevs
add global abbrev
add mode-local abbrev
add global expansion for this abbrev
add mode-local expansion for this abbrev
explicitly expand abbrev
expand previous word dynamically
Miscellaneous
numeric argument
negative argument
quoted insert
C-u num
M-C-q char
Regular Expressions
any single character except a newline
zero or more repeats
one or more repeats
zero or one repeat
quote special characters
quote regular expression special character c
alternative (“or”)
grouping
shy grouping
explicit numbered grouping
same text as nth group
at word break
not at word break
entity
match start
line
^
word
\<
symbol
\_<
buffer
\‘
class of characters
match these
explicit set
[ ... ]
word-syntax character
\w
character with syntax c
\sc
character with category c \cc
Registers
. (dot)
*
+
?
\
\c
\|
\( . . . \)
\(:? . . . \)
\(:NUM . . . \)
\n
\b
\B
match end
$
\>
\_>
\’
match others
[^ . . . ]
\W
\Sc
\Cc
International Character Sets
C-x r s
C-x r i
save value of point in register
jump to point saved in register
C-x r SPC
C-x r j
Keyboard Macros
start defining a keyboard macro
C-x (
end keyboard macro definition
C-x )
execute last-defined keyboard macro
C-x e
append to last keyboard macro
C-u C-x (
name last keyboard macro
M-x name-last-kbd-macro
insert Lisp definition in buffer
M-x insert-kbd-macro
Commands Dealing with Emacs Lisp
eval sexp before point
eval current defun
eval region
read and eval minibuffer
load a Lisp library from load-path
C-x C-e
C-M-x
M-x eval-region
M-:
M-x load-library
Simple Customization
specify principal language
C-x RET l
show all input methods
M-x list-input-methods
enable or disable input method
C-\
set coding system for next command
C-x RET c
show all coding systems
M-x list-coding-systems
choose preferred coding system
M-x prefer-coding-system
Info
enter the Info documentation reader
find specified function or variable in Info
Moving within a node:
scroll forward
scroll reverse
beginning of node
Moving between nodes:
next node
previous node
move up
select menu item by name
select nth menu item by number (1–9)
follow cross reference (return with l)
return to last node you saw
return to directory node
go to top node of Info file
go to any node by name
Other:
run Info tutorial
look up a subject in the indices
search nodes for regexp
quit Info
save region in register
insert register contents into buffer
customize variables and faces
M-x customize
Making global key bindings in Emacs Lisp (example):
(global-set-key (kbd "C-c g") ’search-forward)
(global-set-key (kbd "M-#") ’query-replace-regexp)
Writing Commands
C-h i
C-h S
SPC
DEL
b
n
p
u
m
n
f
l
d
t
g
h
i
s
q
(defun command-name (args)
"documentation" (interactive "template")
body)
An example:
(defun this-line-to-top-of-window (line)
"Reposition current line to top of window.
With prefix argument LINE, put point on LINE."
(interactive "P")
(recenter (if (null line)
0
(prefix-numeric-value line))))
The interactive spec says how to read arguments interactively. Type C-h f interactive RET for more details.
c 2015 Free Software Foundation, Inc.
Copyright For GNU Emacs version 24
Designed by Stephen Gildea
Permission is granted to make and distribute modified or unmodified
copies of this card provided the copyright notice and this permission
notice are preserved on all copies.
For copies of the GNU Emacs manual, see:
http://www.gnu.org/software/emacs/#Manuals
Emacs
Emacs
Ta fram hjälp
Uppgift 6.7 I detta kapitel stod det att kommandot C-x = beter sig lite annorlunda när det
får ett prefixargument. Hur beskrivs den skillnaden i kommandots hjälptext? (Citera!)
Ta fram en förteckning med Emacskommandon
som innehåller »paragraph« i sitt namn för att hitta kommandon som gör saker med hela stycken av
texten.
Det står vad kommandona heter och hur man
kan utföra dem. (Om det inte går på annat sätt så
med M-x .)
Ibland finns det flera sätt att utföra samma
kommando.
Uppgift 6.13 Man rör sig runt i bufferten med
vanliga förflyttningskommandon som t. ex. <up>
och <down>, så dessa fungerar inte som i terminalen så att de tar fram tidigare kommandon. Vad
kan man istället ge för kommandon för att få detta? Hur såg du det?
Ramar
Kommandon som gör saker med ramar (frames)
börjar med C-x 5. Ta reda på vad det finns för
olika kommandon som börjar med C-x 5 och har
ett tecken till.
Uppgift 6.14 Vad heter kommandot med vilket
man kan öppna en fil i en annan ram som du använde i uppgift 6.1?
Jämföra filer med Ediff
Uppgift 6.8 I den förteckning du fått fram
nämns forward-paragraph för att gå fram ett
stycke. Vad finns det för olika kortkommandon
för det i Emacs?
När man tar fram kommandon som innehåller
något i sitt namn kan man också ge ett regexp.
Gör det för att ta fram kommandon vars namn
slutar på »regexp«. Alltså ska du inte få med t. ex.
kommandot regexp-builder, för det slutar ju inte så.
/local/kurs/ids/verb.txt har ändrats en del
jämfört med motsvarande fil för flera år sen,
/local/kurs/OLD/ids09/verb.txt. Nu ska du
använda ett Emacskommando för att jämföra dessa. Öppna båda dessa filer i Emacs.
Uppgift 6.15 Namnet på en buffert i Emacs
brukar ju vara som filnamnet. Hur tycks Emacs
sätta namn på buffertar när man öppnar flera filer
med samma namn?
I menyn Tools Compare (Ediff) hittar du ett
Emacskommando för att jämföra två buffertar.
Uppgift 6.9 Hur gjorde du det?
Använd det! (Välj bufferten med den äldsta filen
Uppgift 6.10 Vad visade Emacs för resultat från först (A) och sen den nya (B).)
Du får en egen liten ram som heter Ediff. De
detta?
viktigaste kommandona här är SPC (mellanslag
De flesta av dessa kommandon finns det in- alltså) för att gå till nästa skillnad och DEL för
te snabbkommandon för, utan det är M-x som att gå till förra skillnaden. Prova att gå fram några
nämns för att köra dem, men det finns några un- steg!
Det finns annat att trycka än SPC och DEL och
dantag som har snabbkommandon.
det står hur du kan få hjälp.
Uppgift 6.11 Ett av dessa undantag är ett kom- Uppgift 6.16 Hur många skillnader räknar Ediff
mando för att visa sådant som matchar ett visst re- med mellan dessa filer?
guljärt uttryck på ett visst sätt (med en viss face).
Uppgift 6.17 Vilken tangent kan man använda
Vad heter det kommandot?
här för att hoppa till en viss skillnad genom att
Uppgift 6.12 Snabbkommandot för det kom- ange dess nummer som prefixargument?
mandot består av tre delar. Ge de två första delarna och tryck sen på hjälptangenten för att få veta Uppgift 6.18 Vad består skillnad nummer 313
vad det finns för möjliga kommandon som börjar av?
likadant. Hur såg hjälpen du fick då ut? (Alltså Uppgift 6.19 Vad består skillnad nummer 145
innehållet i bufferten *Help* då.)
av?
Emacs-kommandot shell finns det inget
snabbkommando för, så det får man lov att ge
med M-x. Gör så! Detta kör ett skal inne i Emacs.
Uppgift 6.20
Hur avslutar man Ediff?
Det finns flera andra Ediff-kommandon som du
såg i menyn. Ett ytterligare som av någon anledning inte fanns i menyn är ediff-backup.
65
INLUPP 6: VERSIONSKONTROLL OCH EMACS
Ta fram beskrivningen av detta kommando nu
när du vet dess namn.
Uppgift 6.21 Hur lyder den beskrivningen?
Prova detta kommando med dodo.txt.
Uppgift 6.22 Hur skrev du för att köra detta
kommando?
Lägen
I uppgift 4.41 använde du ett kommando som aktiverar en minor mode. Ge det kommandot igen!
Uppgift 6.23 Att denna minor mode är aktiv visas i informationsraden. Hur?
Uppgift 6.24 Om du håller muspekaren över
detta, vad står det då att vänster musknapp gör
där?
Uppgift 6.25 Hur kan du slå av denna minor
mode?
Tangentbordsmakron
Med makron kan man »spela in« tangenttryckningar för att sedan upprepa dem flera gånger.
Gå till Emacs-dokumentationen i Info (t. ex.
med Help Read the Emacs Manual ) och välj menyalternativet »Keyboard Macros« där.
Uppgift 6.26 Så vilken tangent kan du använda
för att börja spela in?
Uppgift 6.27 Och vilken tangent för att sluta
spela in (avsluta definitionen)?
När detta går bra så spela in medan du gör det.
Stå i början av den första raden som ska ändras
och tryck på tangenten för att spela in. Ändra raden som du ska och avsluta genom att placera dig
i början av nästa rad och avsluta inspelningen.
Nu kan du trycka på den senaste tangenten igen
för att utföra samma sak för den raden, osv. för
alla rader, så att alla rader kommer att bestå av ett
delstatsnamn, ett mellanrum och dess årtal inom
parentes.
När det är klart så spara och checka in resultatet!
Uppgift 6.29 Hur skrev du ditt makro?
När ditt makro fungerar bra, så gör
M-x insert-kbd-macro i svarsfilen för att
få fram svar på denna fråga. När du får fråga om
name så tryck bara retur.
Detta lägger in kod som visar ditt makro.
Klar för idag?
När du slutar för dagen, så checka in det du har
gjort hittills i ids6.txt innan du går!
Om du har ändrat saker i tidigare labbar så
checka in dem också innan du går.
Gå i skalet till Subversionkatalogen och ge
kommandot svn status där. Om du får ett tomt
resultat är allt som det ska. Om du får rader som
börjar med »M« är det filer som är modifierade
men inte incheckade. Om du får rader som börjar
med »?« är det filer som inte är registrerade.
Se till att inga av dina labbfiler listas där. Checka in ändringar och kolla med svn status igen.
Uppgift 6.28 Det finns andra sätt att ta reda på
detta, men slå ändå upp i Info för att se att du kan
det också. Kontrollfråga: Vad är det för nummer
på detta avsnitt i Info?
(De övriga kommandona som har med makron
att göra kan du strunta i denna gång.)
Kopiera us-states.txt till us-states-6.txt
i den katalog som sköts av Subversion. Öppna kopian i Emacs och checka in den. Placera dig sen
först på första raden. Använd nu enbart kortkommandon från tangentbordet för att ändra den raden från
1787-12-07
Delaware
till
Delaware (1787)
genom att »döda« årtalet och sen klistra in det
igen på rätt ställe tillsammans med övriga ändringar. (I resultatet är det bara ett mellanslag mellan delstatsnamn och parentes.)
66
Kommer jag åt filerna hemifrån?: Ja, om du har
svn på din dator kan du skapa en arbetskatalog
med samma filer där också.
När du ger det första kommandot för att checka
ut katalogen måste du skriva
svn://stp.lingfil.uu.se/ids15/username
istället för bara
svn://stp/ids15/username
för att den ska hitta servern.
Om du har gjort ändringar på ena stället så ge
kommandot svn update på andra stället för att
få in ändringarna där också.
Kapitel 7
LaTeX
LaTeX är ett typsättningsprogram. Det är ett sätt
att göra texter färdiga för tryck som skiljer sig från
ordbehandlare och mer liknar att lämna in ett manus till ett sätteri. Input är en vanlig textfil skriven
i en editor i vilken texten blandas med kommandon för typsättning. Dessa filer brukar ha namn
som slutar med ».tex«.
LaTeX används mycket för akademiska artiklar. Det finns bra stöd för sådant som bibliografier och källhänvisningar. Matematisk sats är
dess specialitet, men även inom t. ex. lingvistik
används det mycket. Tidskriftsartiklar inom datorlingvistik skrivs oftast med LaTeX, och STPare skriver sina exjobb och ibland kursrapporter i
LaTeX.
LaTeX bygger på ett tidigare system TEX. I denna text talas hädanefter om LaTeX även när det
som sägs inte är specifikt för LaTeX, utan gäller
för TEX överhuvudtaget.
Traditionellt producerar LaTeX output på ett
särskilt format som heter DVI (Device Indepen-
TEX
LATEX
Figur 7.1: När logotypen TEX med det nersänkta
E:et inte kan användas brukar man skriva »TeX«. För
LaTeX finns det också en logotyp, LATEX, men den använder jag inte i detta kompendium.
dent), men det går även att producera PDF, och
det är vad denna text utgår från. PDF (Portable
Document Format) är ett populärt filformat utvecklat av Adobe Systems.
7.1
Stycken och rader
I själva texten spelar det ingen roll var man bryter
raderna i input. LaTeX kommer att bryta raderna
i den satta texten där den finner det bäst att göra
det sen ändå.
Man markerar nytt stycke med tomrad, så som
nytt stycke ofta visas t. ex. i text på bildskärm.
Vanligen visas nytt stycke (paragraph på engelska) istället med indrag i satt text på papper, så
som i denna text. Nu kommer ett nytt stycke:
Men hur det visas beror som mycket annat på
vad är för slags dokument man skriver.
När man behöver göra något särskilt i texten
använder man vissa speciella tecken och olika
kommandon för det.
7.2
Allmän struktur
Ett litet LaTeX-dokument kan se ut som
i figur 7.2, som både visar LaTeX-koden
och dess resultat. Själva texten står mellan
\begin{document} och \end{document}. Före
det, i dokumentets huvud, kan en del funktionalitet ändras, bland annat genom att extra paket laddas in, som här, där ett paket »url« laddas in.
En sak man kan se direkt är att klamrar {}
används som parenteser för att hålla ihop text i
LaTeX.
Exemplet har två avsnitt (section) med rubrik. Det finns två exempel på matematik. Dels
en numrerad ekvation mellan \begin{equation}
och \end{equation} och dels en kort text mellan
\( och \). I den matematiska texten finns en del
extra kommandon, och vanliga bokstäver skrivs
kursivt som variabler.
67
7. LATEX
\documentclass[a5paper]{article}
\usepackage{url}
\begin{document}
\author{Albert Einstein}
\title{Special Relativity}
\date{June 30, 1905}
\maketitle
\section{Some text}
Bla bla bla bla bla bla bla bla bla.
Bla bla bla bla bla bla bla bla bla.
Bla bla bla bla bla bla bla bla bla.
Read more at
\url{http://www.alberteinstein.info/}!
Special Relativity
Albert Einstein
June 30, 1905
1
Some text
Bla bla bla bla bla bla bla bla bla. Bla bla bla bla bla bla bla
bla bla. Bla bla bla bla bla bla bla bla bla.
Read more at http://www.alberteinstein.info/!
2
Conclusions
I have shown that e = mc2 , and further that
\section{Conclusions}
I have shown that \( e = mc^2 \),
and further that
\begin{equation}
m = { m_0 \over \sqrt{1 - { v^2/c^2 }}}
\end{equation}
m0
m= p
1 − v 2 /c2
(1)
1
\end{document}
Figur 7.2: Einsteins speciella relativitetsteori (i starkt förkortad version). Till vänster LaTeX-kod och till höger dess resultat.
7.3
Kommandon med \ (bakstreck) 7.3.1 Argument till kommandon
En del kommandon tar argument. Då blir det som
kommer direkt efter kommandot argument till
kommandot. Ett exempel är kommandot \= som
lägger en makron (övre streck) över sitt argument,
så Liep\=aja ger »Liepāja« (en stad i Lettland).
Ett exempel på ett kommando av den första
Ett annat exempel är \author i figur 7.2. Där
sorten ses i 42\,000\,000 som ger »42 000 000« är argumentet (»Albert Einstein«) längre än ett
(42 miljoner). Där används \, som lägger in ett tecken och står därför inom klamrar.
smalt mellanrum som inte kan brytas. Så markerar man vanligen tusental för stora tal i tryckt
text.1 I Einstein-exemplet finns det två andra exempel, \( och \), som påbörjar respektive avslu- 7.4 Klamrar för grupper
tar matematisk text.
Den andra sorten, med en eller flera bokstä- Med {} avdelar man nämligen en grupp. Detta
ver, finns det flera exempel på i figur 7.2, t. ex. är ett sätt att behandla en del av texten som en
\author och \maketitle, och \sqrt för square enhet, och används framför allt för att ge denna
root (= kvadratrot) i den matematiska texten. Al- del som argument till ett kommando, t. ex. komla tecken går att skriva med hjälp av bara ASCII. mandot \emph som betonar en text (emphasize)
Om man t. ex. inte hittar »©« på sitt tangentbord genom att kursivera den: LaTeX är skapat av
\emph{Leslie Lamport} ger »LaTeX är skapat
kan man skriva \copyright istället.
av Leslie Lamport«.
Exemplet Liepāja ovan hade kunnat skrivas
Liep\={a}ja, men här behövs inget ihopgruppe1 På bland annat svenska. På t. ex. engelska används istället
rande, utan det räcker med Liep\=aja eftersom
oftast komma som tusenavskiljare: 42,000,000.
argumentet bara är ett tecken.
Kommandon i LaTeX inleds normalt med bakstreck. Sedan följer antingen ett tecken som inte
är en bokstav, eller ett ord med en eller flera bokstäver.
68
7.5. Speciella tecken
7.5
Speciella tecken
Tabell 7.1: Kommandon för att välja typsnitt i LaTeX
Bakstreck och klamrar är inte de enda tecken som
har särskilda betydelser i LaTeX. Här är en längre
lista:
# $ % & ~ _ ^ \ { }
Om man vill skriva dessa tecken får man därför använda särskilda kommandon. Kommandona \# \$ \% \& \_ \{ \} finns för att verkligen
skriva motsvarande tecken.
7.6
Titel och rubriker
Titeln i början av dokumentet skapas av
\maketitle. Den text som det blir beror på vad
man har skrivit innan dess för argument till kommandon som \title, \author och \date, som
själva inte skriver någon text i dokumentet.
Rubriker gör man med kommandon som
\section{Förord}. Lägre rubriknivåer ges med
\subsection och \subsubsection. Vilken stil
sådana rubriker skrivs med beror på ens dokumentklass och inställningar. Dokumentklassen avgör också vilka nivåer som finns tillgängliga. I
bland annat dokumentklasserna book och report
finns även \chapter som en högre nivå.
7.8
Kommando
Effekt
\emph{text}
Betonad
\textrm{text}
\textsf{text}
\texttt{text}
Vanlig text
Sans serif
Skrivmaskin
\textmd{text}
\textbf{text}
Medium (vanlig)
Fetstil
\textup{text}
\textit{text}
\textsl{text}
\textsc{text}
upprätt
Kursiv
lutande
KAPITÄLER
Typsnitt
I tabell 7.1 visas olika kommandon för att byta
typsnitt i LaTeX. Varje typsnitt tillhör en familj,
en serie och en form. Med »skrivmaskin« menas
här en icke-proportionell font, dvs. en där alla tecken är lika breda.
Det mest använda av dessa kommandon är
\emph{...} för att betona en del av texten. I de
flesta sammanhang visas detta med kursiv stil.
Det går att kombinera olika familjer, serier och
former med varandra.
För att skriva text i andra storlekar finns
kommandon
som
\tiny,
\scriptsize,
7.7 Omgivningar med begin–end \footnotesize, \small, \large, \Large,
\LARGE, \huge och \Huge. Dessa tar inga arguI många fall kan man avgränsa en speciell del av ment utan ändrar storleken på allt som följer
texten som en omgivning (environment). En så- inom den grupp de står. Grupper avgränsas av {}
dan omgivning börjar med ett kommando \begin och av omgivningar. Med {\huge hej} får man
med något argument och slutar med ett \end
, till exempel, och med {\tiny hej} får
med samma argument. Detta exempel visar koman hej. Utan klamrarna runt skulle ändringen
den över och resultatet under den streckade linfortsätta att gälla för resten av texten!
jen.
hej
\begin{itemize}
\item surprise
\item fear
\item ruthless efficiency
\end{itemize}
7.9
Hårt mellanslag (~)
Med tildetecknet (~) skriver man ett hårt
(fast) mellanslag, det vill säga ett där det inte bör bli radbrott. Man bör till exempel
helst skriva John~F. Kennedy istället för John
• surprise
F. Kennedy eftersom man annars kan råka få ett
• fear
radbrott som anses vara osnyggt, som i denna me• ruthless efficiency
ning. Förutom förnamn och initialer anses det
även bäst att hålla ihop många fall av ord plus
Omgivningen itemize avgränsar alltså en kort sifferuttryck som »figur 1« och »kapitel 2«,
punktlista, och i den finns det ett särskilt kom- samt numrerade kungar som »Kristian II«.
mando \item som anger att en ny punkt börjar.
Med omgivningen enumerate får man istället 7.10 Bindestreck och tankstreck
en numrerad lista som börjar med 1 och går uppåt.
Det finns olika långa vågrätta streck vilket skrivs
Vi har redan sett omgivningen document som med ett till tre tecken i rad:
omger hela texten.
- (-) Bindestreck, divis
69
7. LATEX
-- (–) en-dash
--- (—) em-dash.
Den mellanlånga används till intervall:
14--15 juni ger 14–15 juni. På svenska används
den också som talstreck och tankstreck – då med
mellanrum runt sig.
(I engelsk och amerikansk typografi används
istället oftast det allra längsta strecket som
tankstreck—då utan några mellanrum runtom.)
Om man har flera väljare så listas de med komma mellan sig. Det här kompendiet är skrivet med
LaTeX och börjar
\documentclass[a4paper,twocolumn]{memoir}
7.12.1
usepackage
Förutom att man på ovanstående sätt kan anpassa
dokumentklassen i viss mån kan man även ladda in paket i LaTeX som kan göra allt möjligt,
t. ex. definiera fler kommandon eller ändra be7.11 Citattecken
tydelsen på det man redan har. Detta görs med
På s. 39 stod det om hur man i en del samman- \usepackage. I figur 7.2 används ett paket »url«.
hang använder ASCII-tecknen ` och ' för att be- Det gör att ett kommando \url definieras och
teckna de olika citattecknen före respektive efter kan användas senare i dokumentet.
Vitsen med detta är framförallt att få raddelett citat (på t. ex. engelska). Så gör man i LaTeX.
ning
på ett annat sätt än normalt för sådana.
Så för att få ‘quote’ skriver man `quote' och för
Kommandot
ser till att det inte blir avstavning
att få “quote” skriver man ``quote''. På svensmed
bindestreck
i delarna eftersom det kan göka används däremot samma tecken före och efter:
ra
det
oklart
om
bindestrecken ingår i urlen/
''citat'' (som ger ”citat”).
sökvägen eller inte. Dessutom kommer ~ att bli
Observera att man skriver två citattecken efen tilde och inte tolkas som hårt mellanslag så
ter varann för att få dubbelcitat. Det raka dubbelsom är det normala, och hela texten skrivs ut
citattecknet " i ASCII används aldrig som citatmed en särskild stil, normalt skrivmaskinsstil. I
tecken i LaTeX, eftersom det skulle vara oklart åt
samma paket definieras också ett liknande komvilket håll det skulle vara riktat.
mando \path för att skriva sökvägar, som t. ex.
\path{~/Desktop/foo.txt}.
Ett vanligt paket för att kunna inkludera bilder
7.12 Dokumenthuvudet
är graphicx. (Observera stavningen!)
(Både url och graphicx är med från början i
Det som blir själva texten står som tidigastupp.)
re sagt i en omgivning document, dvs. mellan
Även till \usepackage kan man ge extra in\begin{document} och \end{document}. Före
formation
inom []. Paketet babel hanterar t. ex.
detta finns det så kallade dokumenthuvudet.
sånt
som
är
speciellt för olika språk, och då ger
Den första raden anger dokumentklass kan som
man
språket
inom [] så här:
enklast se ut som \documentclass{article}.
Några standarddokumentklasser som följer med \usepackage[swedish]{babel}
LaTeX är article, report och book, men det
finns även ett stort antal andra dokumentklasDet gör t. ex. att kommandot för att lägga in inser skrivna på olika håll. En del är specialiserade nehållsförteckning (se avsnitt 7.15) använder »Inför en visst slags text, t. ex. affärsbrev, doktors- nehåll« som rubrik istället för »Contents« och likavhandlingar eller mötesprotokoll. I inluppen får nande för andra kommandon med annars fixa texni använda en lokal klass stupp (språkteknologi ter. Det gör också att svenska avstavningsregler
uppsala) som bygger på en som heter scrartcl.
används.
Med stupp görs följande två automatiskt, men
När man anger dokumentklass kan man också
ge ett optionellt argument inom [] där man listar annars är det något som du oftast bör ha med,
ett antal väljare som ändrar hur den klassen fun- t. ex. i standarddokumentklasserna book, report
gerar på olika sätt. Vilka väljare som kan ges be- och article:
ror på vilken klass man använder, men några som
standardklasserna använder är:
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
a4paper Gör layout för att passa A4-papper. Det
är default för stupp.
Den första raden talar om vilken teckenkodning
10pt, 11pt, 12pt Någon av dessa kan användas
LaTeX-filen är skriven med. Utan den fungerar inför att ange hur stor texten ska vara i »punkte tecken som åäö i filen.
ter«. Det görs annorlunda i stupp.
Den andra raden talar om vilken fontkodning
twocolumn Skriv texten i två kolumner per sida
LaTeX ska använda. (Detta behövs för att åäö ska
räknas som egna bokstäver och inte bara som ett
Hela raden kan se ut t. ex. så här:
a eller o med accent. Utan detta kommer klipp\documentclass[a4paper]{report}
och-klistra från den resulterande PDF-filen ge fel
70
7.13. Figurer
Se till exempel figur~\ref{fig:knuth}
Figur 7.3: Donald E. Knuth har skrivit TEX som
LaTeX bygger på.
resultat, och dessutom kommer avstavningsmönster som innehåller åäö inte att fungera.)
7.13
Figurer
Figurer är floats. De har inte en fix exakt placering
i texten, utan kan flyta runt och passas in där de
får rum i den ordning som de kommer i texten. Se
till exempel figur 7.3 som på ett sätt kan sägas ha
hamnat mitt i en mening. Den figuren har skapats
med ungefär följande:
\begin{figure}
\centering
\includegraphics{donknuth}
\caption{Donald E. Knuth har skrivit
\TeX\ som LaTeX bygger på.}
\label{fig:knuth}
\end{figure}
Själva bildfilen togs in med kommandot
\includegraphics. För att det ska fungera måste ett extra paket graphicx användas, så därför
har jag skrivit \usepackage{graphicx} i dokumentets huvud. Det följer med automatiskt med
stupp, så i inluppen behöver ni inte göra det.
Filen heter egentligen donknuth.png, men filnamnsändelsen behöver inte anges.
Med \caption ger man en bildtext som argument.
En viktig del är kommandot \label som ger
denna figur en etikett – i exemplet »fig:knuth«. Figurer brukar man referera till i texten, och då vill
jag inte behöva tänka på figuren som figur »7.3«,
för det numret kan ju ändras allteftersom jag tar
bort och lägger till figurer medan jag skriver, utan istället tänker jag på den som »figuren Knuth«
och kallar den »fig:knuth« i LaTeX-koden. När
man vill referera till en sådan etikett i sin text använder man kommandot \ref med etiketten som
argument. Jag har därför ovan skrivit
vilket gav texten
Se till exempel figur 7.3
men kan ändras om jag lägger till eller tar bort
figurer.
Märk även:
• Kommandot \centering anger att text och
annat ska centreras. Eftersom det står inne
i en begin-end-omgivning gäller det bara innanför den.
• Det är inget som nödvändigtvis ingår i
figure att det ska vara en bildfil som inkluderas. Det hade kunnat stå godtycklig
LaTeX-text istället. Ibland kan man t. ex. vilja lägga ut ett lite programkod i en figur med
en verbatim-omgivning. Se avsnitt 7.17.
Man skriver in figuren ungefär på det ställe i
texten där man vill ha den (normalt där man första gången refererar till den med \ref), så dyker
den upp ungefär där, beroende på var den passar
in. (Mer detaljer om hur man kan styra placeringen tas inte upp här.)
Ofta behöver man anpassa en bildfil för att den
ska passa som illustration. I synnerhet kanske bilden inte har rätt storlek för att passa in. Ett sätt
att lösa sådant är att ange hur hög bilden får vara,
så här:
\includegraphics[height=5cm]{dragon}
Bilden kommer att förminskas (eller förstoras)
så att den får den önskade höjden. Man kan istället ange bildens bredd, med t. ex. width=10cm
istället. Ibland kan det vara praktiskt att ange
width=\linewidth som ger samma bredd som
texten har.
7.14
Kommentarer med %
I LaTeX fungerar procenttecknet som kommentarstecken. LaTeX ignorerar allt som följer efter
ett procenttecken fram till slutet av raden. Med
användning av detta kan man kommentera bort delar av texten så att de inte syns i det man producerar, men ändå finns kvar där i texten man arbetar
med ifall man ångrar sig senare. Det är också vanligt att man använder det för kommentarer till sig
själv innan texten är färdigskriven.
Här är som exempel ett litet utdrag ur
min LaTeX-kod till teckenrepresentationskapitlet, närmare bestämt en del från s. 40 med en lista
med exempel på locales:
\item \texttt{fr\_CA} :
\item \texttt{zh\_CN} :
\item \texttt{zh\_TW} :
% \item \texttt{nb\_NO}
% \item \texttt{nn\_NO}
Franska i Kanada
Kinesiska i Kina
Kinesiska i Taiwan
: Bokmål
: Nynorska
71
7. LATEX
Här kan man se hur jag i något skede av skrivandet hade med två exempel till, som jag sen kommenterade bort så att de inte kom med i kompendiet. Genom att göra det till en kommentar
istället för att ta bort raderna helt skulle jag enkelt
kunna ta tillbaks dessa exempel om jag ångrat mig
igen.
Det finns annat som också kan kräva
flera pass genom filen. Med kommandot
\tableofcontents kan man t. ex. lägga in
en innehållsförteckning till ett dokument, men
vilka kapitel som finns var vet inte LaTeX förrän
vid andra körningen, så efter första körningen är
innehållsförteckningen ännu tom.
7.15
7.16
Att referera inom texten
För att kunna referera till en annan del av texten
använder man alltså kommandona \label och
\ref som båda tar ett argument.
Det gäller inte bara figurer och tabeller, utan
andra delar också, t. ex. numrerade kapitel och
andra avsnitt. Även då vore det dumt att skriva
»kapitel 7« i texten, för innan man har skrivit klart
så har man kanske flyttat det kapitlet eller delat
upp ett tidigare kapitel i två så det har ett annat
nummer.
Istället kan man använda kommandot \label
direkt efter kommandon som \chapter och
\section och sen hänvisa tillbaka till dessa etiketter med \ref som vanligt.
Exempel: På sidan 70 står denna parentes, här
visad med LATEX-kod och med dess resultat:
(se avsnitt~\ref{sec:referera})
(se avsnitt 7.15)
Med en etikett kallade jag avsnitted om att referera för sec:referera så att jag kunde hänvisa
till det med \ref och få rätt siffror. Att det står ~
istället för vanligt mellanslag mellan »avsnitt« och
siffrorna är bara för att undvika nyrad just där.
Med \pageref refererar man istället till den sida där motsvarande etikett finns:
se avsnitt~\ref{sec:referera}
på sidan~\pageref{sec:referera}
se avsnitt 7.15 på sidan 72
Man brukar ge figurer etiketter som börjar med
»fig:«, kapitel etiketter som börjar med »chap:«,
avsnitt etiketter som börjar med »sec:« osv. för att
lätt skilja dem åt.
När man kör LaTeX på en fil lär den sig sånt
som att fig:knuth ska bli 7.3 så att den vet det
till nästa gång man TeXar filen. Det gör att när
en hänvisning sker framåt i texten så behöver man
TeXa filen en gång till innan alla detaljer stämmer.
(Det talar LaTeX om vid körningen i så fall, i stil
med
LaTeX Warning: Label(s) may have changed.
Rerun to get cross-references right.
72
Övriga tecken
Vill man skriva tecken som man inte hittar på tangentbordet kan man använda LaTeX-kommandon
för det. I tabell 7.2 visas några kommandon för att
sätta accenter över och under bokstäver, inklusive
en del lite ovanligare accenter.
Alla kommandon hade kunnat använda klamrar
runt sina argument, men i tabellen används detta
inte för de kommandon vars namn består av en
icke-bokstav.
7.17 verbatim och \verb
När man vill inkludera skalkommandon eller
programkod i en rapport är det besvärligt om
en mängd tecken tolkas speciellt av LaTeX.
Då kan man använda en speciell omgivning
verbatim. Efter \begin{verbatim} återges allt
utan några särskilda tolkningar fram till nästa
\end{verbatim}.
Så genom att skriva
\begin{verbatim}
Här kan jag skriva \ och % osv.
\end{verbatim}
får man
Här kan jag skriva \ och % osv.
Skrivmaskinsstil används, så som man ofta gör
när man återger programkod.
Tabell 7.2: Några accentkommandon i LaTeX
\'o
\`o
\^o
\"o
\~o
\=o
\.o
\u{o}
\v{o}
\H{o}
\c{o}
\d{o}
\b{o}
ó
ò
ô
ö
õ
ō
ȯ
ŏ
ǒ
ő
o̧
o.
o
¯
akut accent
grav accent
cirkumflex
diaeresis/umlaut
tilde
makron
långt ungerskt umlaut
cedilj
d = dot
b = bar
7.18. LaTeX i Emacs – AUCTeX
För kortare text inne i ett stycke kan man använda kommandot \verb. Här är ett till exempel
med först kod och sen resultat som visar hur man
kan använda det:
Med det reguljära uttrycket
\verb![^0-9]$! fungerade det.
Ett annat problem med UTF-8 i LaTeX är att av
tekniska skäl måste det ’godtyckliga’ tecknet som
används med \verb vara ett ASCII-tecken, så det
går inte att använda t. ex. \verb§foo§ eftersom
§ inte finns med i ASCII. Ofta används något av
tecknen !|+=_ som brukar avdela texten rätt tydligt.
Med det reguljära uttrycket [^0-9]$ fungerade det.
7.20
Man slipper att ^ och $ tolkas särskilt av LaTeX.
För att man ska kunna ha med vilka tecken som
helst i argumentet till \verb så beter den sig speciellt. Istället för {} runt argumentet sätter man
ett godtyckligt tecken som inte är en bokstav före
och efter. Det betyder alltså samma sak att skriva
\verb!foo! som \verb=foo= som \verb{foo{.
Inom verbatim så bryter LaTeX raderna precis
där man själv har brutit raderna, så se upp med
att ha för långa rader som inte syns helt för att de
sticker utanför papperet!
Det kan leda till att texten spiller ut
Det finns paket som är till för snitsigare kodlistningar också, men den enkla omgivningen
verbatim duger bra ibland.
7.18
Mer information
Det finns gott om introduktioner till LaTeX. På
http://stp.lingfil.uu.se/lila/tex/ finns
en del användbara länkar, bland annat till sånt
som handlar specifikt om användning av TEX för
lingvistik. Det finns mycket i LaTeX som passar
för språkvetenskap, som funktionalitet för att
rita träd, skriva fonetisk skrift och grammatiska
strukturer enligt flera formalismer med mera.
där den inte hör hemma. Dessutom blir det svårt att se va
LaTeX i Emacs – AUCTeX
Vi använder ett särskilt paket AUCTeX för att använda LaTeX i Emacs. (Det är annars ännu inte
det normala i Emacs, så om du editerar LaTeXfiler i Emacs på en annan dator kan det bete sig
annorlunda.)
Det kommer att användas i labben och ger exempel på hur ett editeringsläge i Emacs kan ge
särskilt stöd för en viss sorts text.
Det sker bland annat genom att Emacs förstår
sig på syntaxen i LaTeX-filer och därmed visar
kommandon, text och kommentarer i olika färg,
och ger »lagom« långt indrag med TAB-tangenten,
beroende på vad det är man skriver. Det märks
också på att det finns särskilda kommandon för
att lägga in vanliga saker i filen, t. ex. figurer och
tabeller; samt att man kan köra LaTeX på filen
med kommandon direkt från Emacs och att den
då även tolkar eventuella felmeddelanden och direkt tar en till rätt rad i den fil man skrivit.
Detta liknar motsvarande stöd för olika programspråk när man programmerar.
7.19
UTF-8 och LaTeX
Allt fungerar inte perfekt med Unicode i LaTeX.
Långt ifrån alla tecken fungerar rakt av att bara stoppa in i filen. För att skriva på ryska (porusski) är det inte bara att stoppa in sådana tecken i filen, t. ex.
73
Inlupp 7: LaTeX
Innan något annat
Gå till kurskatalogen och ge kommandot
svn co svn://stp/ids15/alla
Det skapas en ny Subversion-katalog alla som
du ska använda senare i labben, men inte nu direkt.
Första LaTeX-dokumentet
Dessa labbinstruktioner är pratiga med detaljerade instruktioner som du får följa steg för steg.
Början
I denna labb ska du skapa en LaTeX-fil med diverse innehåll i Emacs. Börja med att i Emacs öppna
en ny fil latex1.tex i katalogen från förra gången
som heter som ditt användarnamn och som Subversion sköter.
Emacs känner igen ändelsen .tex så du hamnar
i en särskild Emacs-mode för att editera LaTeX. I
informationsraden står det LaTeX/P inom parentesen och du har särskilda menyer, bl. a. en som
heter just LaTeX .
Det bör också stå Fill i parentesen i informationsraden, eftersom du har slagit på Options
Auto Fill in Text Modes i menyerna tidigare.
I samma katalog ska du också skapa och checka
in ids7.txt med svar på frågor.
svara istället stupp. Sen frågas efter Options. Svara ingenting, dvs. tryck bara på RET.
Att C-c C-e började på C-c var väl inte någon
överraskning? Det är den normala prefixtangenten i Emacs för kommandon som är speciella för
ett visst läge, i detta fall för LaTeX-läget.
Ett första avsnitt
Skriv in \section{Röda rummet}, ny rad, och
lägg sedan in filen /local/kurs/ids/rummet2.
txt med Emacs-kommandot File Insert File (eller
C-x i) som lägger in en fil i din buffert.
(Observera att själva texten visas med normal
svart text, medan en del kommandon, deras argument och annat speciellt visas i olika färger. Eftersom detta är en ren textfil så är det inte så att
olika delar i filen verkligen har olika färg, utan det
är bara Emacs som visar det så eftersom den förstår sig på syntaxen och känner till en del viktiga
LaTeX-kommandon.)
Att tillverka och titta på en
PDF -fil
Spara filen. Nu när du har en liten text, så tillverka en PDF-fil från detta genom att köra LaTeX på
filen. Tryck på C-c C-c för att ge ett kommando för texten. Det står default LaTeX. Det blir
bra, så tryck på RET. Ganska snart står det LaTeX:
successfully formatted {1} page.
Ge nu kommandot C-c C-c igen. Eftersom du
redan har lyckats generera en PDF-fil så är defaultkommandot nu stället »View«. Det passar bra, så
tryck på RET. Du får upp ett kommando för att
titta på PDF-filen. Detta är så att du ska kunna
Omgivningen document
ändra i detta om du vill, men det duger bra som
Varje dokument ska ha en document-omgivning. det är, så tryck på RET igen.
Med C-c C-e kan man lägga in en omgivning i
Du får upp en annat fönster som visar innehåltexten, så tryck C-c C-e . I minibufferten får du let i din PDF med hjälp av programmet evince. Se
en anmodan om att ange environment type och de- till att flytta runt dina fönster så att du ser Emacs
fault-värdet är document, dvs. det är vad det blir och evince samtidigt, sida vid sida.
om du bara trycker på RET. Gör så!
Huvuduppgiften för C-c C-e är att lägga in
\begin{nånting} och \end{nånting}, men bero- Huvudet
ende vad det är för omgivning det gäller så kan I första stycket har ordet »stickorna« fått en dålig
den ordna lite annat åt en också. I detta fall pas- avstavning.
sar den på att lägga in deklarationen om vad det
är för dokumentklass. Du har fått en fråga om doUppgift 7.1 Var har det avstavats?
kumentklass och defaultvärdet är article, men
74
Första LaTeX-dokumentet
Det är för att du inte har talat om för LaTeX att
texten är på svenska. Gå därför till dokumentets
huvud, dvs. i delen mellan \documentclass{...}
och \begin{document} och lägg till en rad som
talar om språk och TEXa om filen med C-c C-c
igen och se hur den visade texten uppdateras.
Du får se två Emacsfönster samtidigt. Ett med
din LaTeX-fil där du hamnar där det är fel. Ett
med en beskrivning av felet. Först står där »ERROR:« och ett kort felmeddelande. Sen återges
precis den del där det blev fel och på slutet står
en hjälptext om just detta fel.
Uppgift 7.2 Hur avstavas »stickorna« efter att
du fixat detta?
Uppgift 7.4 Hur lyder det där korta felmeddelandet efter »ERROR:«?
Den här textfilen använde inte sådana tecken
som är speciella i LaTeX, som t. ex. $ eller %, så
den gick att stoppa in rakt av.
Det finns bara en detalj som inte är helt rätt,
och det är att textfilen använder tecknet - i två
olika betydelser. Sök upp alla - i filen med C-s i
Emacs. I ett fall är det ett bindestreck i ett sammansatt ord och är bra som det är. I ett annat fall
är det ett tankstreck. Byt ut det senare mot -- för
att få ett längre streck. (Skillnaden är inte så stor,
men en del märker såna detaljer.)
Lägg in rader med \author{ditt namn},
\title{Labb 7 -- LaTeX} och \maketitle direkt efter \begin{document}, i stil med hur Einstein gjorde i figur 7.2. (Använd ditt namn och
inte Strindbergs – du kommer snart lägga in mer
text i dokumentet.) I den figuren anges även
datum, men ta inte med nån sån rad alls. Kör
C-c C-c och LaTeX igen och kontrollera att du
fått med titeln.
Felmeddelandet bör vara rätt begripligt. Så
\foot var visst fel. Du kommer plötsligt på att
visstja, det heter \footnote istället! Ändra till
detta men råka göra ett nytt fel. Råka byta ut det {
som står direkt efter \footnote mot ett mellanslag och TEXa.
Du får då ett nytt fel. Gå till det felet.
Uppgift 7.5
de?
Hur lyder detta nya felmeddelan-
Rätta detta, TEXa din fil och se på resultatet.
Du kommer antagligen att göra flera oavsiktliga
fel på egen hand efter detta, men nu vet du hur du
då kan få hjälp om var det är fel. Ibland kommer
felmeddelandet att vara hjälpsamt. Ibland kommer du antagligen inte att förstå vad felmeddelandet handlar om, men du får i alla fall en vink
om ungefär var i filen det blivit fel.
Det formella felet blir inte alltid exakt där du
har gjort fel. I det senaste exemplet blev t. ex. felmarkeringen vid slutparentesen } när felet egentUppgift 7.3 Du angav inget datum. Hur gör
ligen var att du glömt den inledande parentesen
\maketitle med datum då?
en bit tidigare.
När det har blivit flera fel så kan du använda
Nu är dokumentet längre än en sida. I skiftnycfeltriangeln för att gå vidare till nästa fel efter att
kelmenyn i evince kan du välja om dokumentet
du tittat på (och förhoppningsvis rättat) ett. Men
ska visas Continuous eller inte. Prova och se vad
har du fått många fel som du inte förstår så kondet innebär!
centrera dig på att fixa det första och kör sedan
om. Kanske är de andra följdfel av det första.
Att göra fel
Ibland råkar man skriva fel så att det man har skri- Listan
vit inte är en korrekt LaTeX-fil. Har du inte redan Gör ett nytt avsnitt (section) med titeln »Toppgjort det så kommer du att göra det så småning- listan«. Där ska du härma texten i figur 7.4. Anom, så gör det med flit nu för att se hur man får vänd kommandot \emph för att betona ett par ord
hjälp med att se var det blev fel.
I texten nämns barège-lappar på ett ställe. Du
tänker att det är ett svårt ord som kräver en förUse C-c ‘ to display: I meddelandet i ekoklaring, så du tänker skriva en förklarande fotnot
arean när det blir fel står det om C-c `. Det gör
till det ordet.
samma sak som den där feltriangeln ger så du kan
Du har (felaktigt) fått för dig att man kan
använda det istället om du vill hålla kvar händerna
skriva sådana med ett kommando \foot, så lägg
på tangentbordet. Men observera i så fall att eftill \foot{Barège är ett slags tunt, glest
ter C-c är det en grav accent som är besvärlig att
skriva. Den ligger på en död tangent med akut och
tyg} direkt efter det svåra ordet.
grav accent så den tangenten måste skiftas (så att
TEXa sedan om filen med C-c C-c .
det blir rätt accent) och sen får man lov att följa
Du får ett meddelande i ekoarean om att det
efter med mellanslagstangenten för att få ` utan
har blivit fel. I ikonraden direkt under menyerna i
något under.
Emacs har en varningstriangel
dykt upp. Tryck
på den för att komma till felet.
75
INLUPP 7: LATEX
De Unix-kommandon som är mest inne just
nu är
1. grep
2. pwd
3. ls
4. sort
5. iconv
Figur 7.4: En del av det dokument ni ska skriva. Utseendet kommer inte att bli helt identiskt, för det här
kompendiet är inte skrivet med samma fonter eller
inställningar.
på vilken du svarar mosebacke och trycker RET.
Om du gjort rätt så har du därmed lagt in
\section{Mosebacke}
\label{sec:mosebacke}
i bufferten.
Skriv ett par inspirerade rader om Mosebacke
i detta avsnitt eller bara bla bla bla om du inte
orkar hitta på nåt bättre.
Nu ska du använda denna etikett för att kunna hänvisa till detta avsnitt från en annan plats
i texten. Gå till slutet av första avsnittet (»Röda
rummet«) och lägg till följande där:
Läs mer om Mosebacke i
avsnitt \ref{sec:mosebacke}.
i texten som det är gjort där, och använd omgivningen enumerate för att få själva uppräkningen.
Använd C-c C-e för att lägga in omgivningen.
Uppgift 7.6 Vilken omgivning föreslås som default då?
TEXa filen och se vad du får för nytt meddelande i ekoarean när du gör detta.
LaTeX vet inte exakt vad det ska stå i första
avsnittet förrän den redan tittat igenom hela texten, så du behöver TEXa den igen. Tryck därför
C-c C-c igen. Emacs vet att du behöver TEXa
om filen, så defaultkommadot är LaTeX. Nu ska
du få »successfully formatted« igen.
Använd alltså enumerate istället för det som
står som default. Du kan använda komplettering.
(Vad gäller själva listan kan du skriva andra kom- Uppgift 7.8 Vilken mycket kort text resulterade
mandon eller i en annan ordning om du vill.)
\ref{sec:mosebacke} i till slut?
Uppgift 7.7 När man skriver sådana här listor
finns det ett kortkommando för att skriva ett nytt
item. Hur lyder det? (Det finns med i LaTeXmenyn.)
Urlar
Sök upp någon sida på nätet (t. ex. på Wikipedia)
med information om Mosebacke. Ändra meningen »Läs mer om Mosebacke. . . « så att den förutom till dit avsnitt sec:mosebacke även hänviSagan
sar till webbadressen (urlen) för denna webbsida.
Gör ett nytt avsnitt (section) med en rubrik som Använd samma sätt att hänvisa till en url som i
passar din saga, och lägg in texten i din saga där. figur 7.2.
Se till att hantera eventuella »konstiga« tecken
som LaTeX tolkar speciellt ifall du råkar ha sådana i din text. Använd LaTeX-kommandot \emph Kommandot C-c C-c
för att betona något ord eller fras i texten.
Du har använt kommandot C-c C-c både för att
TEXa en fil (LaTeX) och för att titta på resultatet
Hänvisningar
(View). Du har även sett att Emacs ofta vet vilket
kommando
du nog vill göra och föreslår LaTeX
Hittills har du skrivit in \section själv för hand.
igen
när
det
behövs.
Man kan också använda ett kommando för det,
Men det går att ge andra kommandon där ockvilket även gör det extra lätt att lägga in en etiketter för denna rubrik. Ställ dig på rätt plats för så. Tryck C-c C-c och välj kommandot Clean.
nästa avsnitt om du inte redan är där och tryck Det rensar upp en del filer som LaTeX skapar meC-c C-s . Detta lägger in en rubrik. Du får först dan det kör med mellanresultat. Då får en fråga
välja hur hög nivå det ska vara på den. Default- om du verkligen vill ta bort dessa filer.
värdet section blir bra, så tryck på RET. Därnäst
får du skriva titeln på detta avsnitt. Det ska vara Uppgift 7.9 Vilka filer undrar Emacs om du vill
»Mosebacke« så skriv så och tryck RET .
ta bort?
Nu får du en ny fråga:
(Optional) What label: sec:
76
(Du kan svara vilket som på frågan nu.)
Första LaTeX-dokumentet
Figurer
Allt som saknas nu är en figur. Välj ut nånting
vad som helst i texten att ge en figur till. Det
skulle t. ex. kunna vara en bild på en groda om
du har en groda med i din saga. Sök upp en
lämplig bild på nätet, t. ex. med bildsökning på
http://images.google.com/. En bra källa till
bilder som det står det fritt att återanvända är
annars illustrationer till artiklar i uppslagsverket
Wikipedia på http://wikipedia.org/. Välj en
bild på något av formaten png, pdf eller jpg. Lägg
bilden i samma katalog som latex1.tex.
Innan du lägger in själva figuren, så lägg in en
hänvisning till den på lämpligt ställe. Om du t. ex.
har valt en bild på August Strindberg så skulle
du kunna skriva så här i början av avsnittet »Röda
rummet«:
Här är den kända inledningen
till romanen \textit{Röda
rummet}.
I figur \ref{fig:strindberg}
finns en bild på författaren,
August Strindberg.
Använd en etikett som börjar med ’fig:’ och
som visar vad det är för figur. (Det behöver inte
likna filnamnet.)
Om du försöker TEXa nu (prova!) kommer du
att få ett varning om att det blir »unresolved references«. Den etikett som du refererar till definieras
aldrig.
Uppgift 7.10 Vad syns i texten på det ställe där
denna okända referens används?
Dags att lägga in själva figuren! Ställ dig antingen före eller efter det stycke där du har med referensen, och tryck C-c C-e för att lägga in en
omgivning – denna gång omgivningen figure.
Den första frågan du får är
(Optional) Float position:
Detta behöver du inte svara på (optional) så tryck
bara på RET för att strunta i detta. Nästa fråga är
viktigare:
Caption:
Att skriva citattecken: Eftersom man inte använder det raka ASCII-tecknet " som citattecken i
LaTeX så läggs istället två tecken in där man trycker på den tangenten i LaTeX-moden i Emacs. Om
man verkligen vill skriva ett ", så ska man trycka
på tangenten " en gång till direkt efter. Men som
sagt, det tecknet används aldrig som citattecken i
LaTeX.
Ge en bildtext till denna figur. Avsluta med
RET.
Center? (y or n)
Svara y.
(Optional) What label: fig:
Denna uppgift sägs också vara frivillig, men man
vill nästan alltid ha en etikett på figurer så att man
kan referera till dem. Skriv det namn som du refererat till med \ref förut.
Nu är all formalia överstökad och du har hamnat på rätt ställe för att skriva in det som ska hamna inne i figuren. Lägg in ett kommando för detta
som i avsnitt 7.13.
TEXa med C-c C-c tills texten är »successfully
formatted« igen. Anpassa bildens storlek ifall det
behövs, t. ex. om den är så stor att den hamnar
på en egen sida eller inte får rum på sidan. Se
sidan 71 i så fall!
Använda paket
Det finns en mängd paket gjorda för LaTeX som
lägger till ytterligare kommandon som är till för
särskilda användningar. Ett som detta kompendium använder är menukeys som används för skriva
menyval, som System Preferences Keyboard på ett
snyggt och behändigt sätt.
Nämn sist i avsnittet »Topplistan« något program som går att köra från Applications -menyn där
du talar om var det finns i menyn och visar det på
ett sånt sätt.
Använd \usepackage{menukeys} i dokumentets huvud för att kunna använda kommandona i
detta paket.
För att veta hur du ska skriva in menyn så gör
texdoc menukeys för att ta fram dokumentationen för detta TEX-paket. (Ja, det är ännu ett sätt
att hitta dokumentationen för något, denna gång
specifikt för TEX.)
Det är bara avsnitt 1 (Introduction) i dokumentationen du får fram som du behöver, för där finns
exempel på hur man gör sånt.
Slut på denna del
När du är klar med latex1.tex så checka in den.
(Kolla en extra gång att det funkar att TEXa den
först.) Skriv att du är färdig med den i incheckningsmeddelandet.
Checka även in den bild du använde in din figur. Annars skulle det ju inte fungera för mig att
TEXa din fil efter att jag checkat ut innehållet i
denna katalog. (Du kan öppna den i Emacs och
checka in den som andra filer där, fast det är en
bild. Emacs kommer att växla mellan att visa innehållet som bild och inte, men det funkar ändå.)
77
INLUPP 7: LATEX
Om du kollar med svn status så ser du att
svn anmärker på att det ligger filer i katalogen
som den inte vet något om, som latex1.pdf och
andra filer som skapades av LaTeX. Det är helt i
sin ordning.
En gemensam sagobok
Den där katalogen alla som du skapade först i
labben är en arbetskatalog för ett repositorium
som ni alla kan ändra i.
Gå till den katalogen och ge kommandot
svn update . Ifall någon annan redan har gjort
någon ändring så kommer du nu att få filerna där
ändrade enligt detta.
Uppgift 7.11 Vad gav svn update för output?
Öppna med Emacs filen sagobok.tex i den
katalogen. Den innehåller början till en sagobok
skriven med LaTeX. Prova att TeXa den och se
på resultatet med hjälp av C-c C-c ett par gånger. (Om det blir något TEX-fel så är det någon som
råkat lägga in något fel. Det fixar nog den personen snart. Då gör du svn update igen för att få
den nya versionen.)
Det finns en rubrik i filen som heter som ditt
användarnamn. Ersätt det som står under rubriken med din saga.
Inte min saga! Om du inte vill ta med din
egen saga så får du istället kopiera första stycket från någon av dem av Selma Lagerlöf på
http://runeberg.org/sagasaga/.
Välj någon som inte redan är tagen.
Uppgift 7.12 Vad har det för effekt?
Nu ska du sätta lite individuell prägel på din fil
genom att göra minst tre av följande i dokumentets huvud:
• Använd en väljare som fontsize=12 för att
ändra textens storlek (mätt i punkter). Prova dig fram till ett värde du trivs med (eller
behåll det som det är)
• Använd väljaren twocolumn för att få
tvåspaltig text.
• Använd väljaren twoside för att få texten anpassad för dubbelsidig layout (som skiljer på
vänster- och högersidor)
• Använd andra typsnitt genom att använda till
exempel fonts=palatino som väljare. Andra möjliga värden är fourier, lm, times och
uu. (Det sistnämnda använder de typsnitt
som ingår i Uppsala universitets grafiska profil.)
• Om du föredrar tomrad för nytt stycke istället för indrag, så använd väljaren parskip.
• Sätt färg på rubrikerna med
\addtokomafont{disposition}{\color{red}}
eller med någon annan färg. Eller istället för
disposition kanske du hellre vill ändra på
captionlabel och/eller caption för bildtexter.
• Använd kommandot \urlstyle med ett argument rm, sf eller same för att tala om att
urlar ska skrivas med »vanlig stil«, sans-serif
eller samma som omgivande text.
TEXa om och prova dig fram tills du blir nöjd.
Se över en extra gång att allt fortfarande ser bra
ut innan du checkar in. Skriv i incheckningsmeddelandet att det är piffandet det gäller.
Prova att det går bra att TEXa utan felmedde- Nu är du klar på riktigt, så snart du har checkat
landen efter ditt inlägg och checka sedan in din in ids7.txt med svar på frågorna också.
ändring.
Undvik versionskonflikter!
Gör svn update innan du gör dina ändringar och checka in ganska snart efter att
du gjort dina ändringar för att undvika att ni
kommer i osynk med varandra.
Piffa till latex1.tex
Du var »färdig« med latex1.tex förut, men nu
ska du ändra lite i den ändå. Där du har kommandon \author och \title, så lägg även till ett
kommando \course med denna kurs namn som
argument. Det är ett kommando som inte finns i
de flesta LaTeX-klasser, men det finns i stupp.
78
Revert file: När du i Emacs försöker ändra igen i
en fil som har ändrats på något annat sätt så varnar
Emacs att filen är »changed on disk; really edit the
buffer?« Det händer t. ex. om filen har ändrats av
svn update för att nån annan har ändrat den.
Ofta är bäst svar varken ja eller nej utan r
(för revert) som hämtar in den senaste texten in
i Emacs-bufferten.
Kapitel 8
Internet & World Wide Web
8.1
ssh
futurum.lingfil.uu.se med punkter mellan
olika delar. Här är se en toppdomän (= Sverige),
Ett program för att logga in på andra datorer över uu (Uppsala Universitet) en underdomän till se
nätet är ssh. Gör ssh stp för att logga in på da- och lingfil en underdomän till uu.se, och sluttorn stp. (Du får lov att ange lösenord, och det ligen är futurum namnet på just denna dator.
kommer inte att ekas.)
Uppgift 8.5 Titta på man-sidan till ssh. Där
syns att bland en massa frivilliga saker så är »hostname« det enda som måste finnas med när man
kör ssh. Se hur man skriver man för att även taKör igång Emacs på den datorn genom att skri- la om användarnamn. Hur ser ett kommando ut
va emacs. Du får upp Emacs inne i terminalfönst- som ssh-ar för att logga in som dig på datorerna
ret. Du kan avbryta Emacs med C-x C-z och här?
komma tillbaka till den med skalkommandot fg.
Uppgift 8.1 När du nu är inloggad på den datorn istället, vad får du för prompt från skalet då?
Uppgift 8.2 På datorn stp finns en fil i /opt/
ids som heter som ditt användarnamn. Vad står
det för fyrsiffrigt tal i den filen?
Avsluta det skal du kör på stp med hjälp av
kommandot exit. Får du ett meddelande om
»stopped jobs« kan du ge exit igen för att avsluta
ändå.
Uppgift 8.3 Det finns en väljare till ssh som på
dess man-sida beskrivs som »Enables trusted X11
forwarding«. Hur lyder den?
Ge ett nytt ssh-kommando där du använder
väljaren från förra frågan för att koppla dig till stp
igen.
Uppgift 8.4 Prova att köra emacs på stp igen.
Vad blir annorlunda nu?
På detta sätt kan du logga in här hemifrån, men
då får du skriva det fullständiga domännamnet
stp.lingfil.uu.se istället för bara stp.
8.2
Domännamn
Nätverket Internet används för en mängd olika system, bland annat för webben. Datorer
på Internet kan ha ett domännamn i stil med
8.3
Toppdomäner
Några av de äldsta toppdomänerna på Internet är
gov för »US government«, edu för skolor och universitet, org för organisationer och com för företag. (Ofta så följs dock inte denna indelning.)
Vid internationaliseringen av Internet tillkom
tvåbokstaviga toppdomäner för länder med samma landskoder från ISO 3166 som i tabellen på
s. 40. (Dock används här inte gb för Great Britain
utan istället uk för United Kingdom.)
Senare har fler allmänna toppdomäner tillkommit, som info och biz.
I många fall används landskoder flitigt även i
helt andra länder. Domänen tv för den polynesiska önationen Tuvalu används t. ex. för flera webbplatser med televisionsanknytning. Domänen nu
som är populär bland annat i Sverige hör egentligen till ön Niue med drygt 2 000 invånare.
8.4
World Wide Web
World Wide Web (WWW), webben, skapades av
engelsmannen Tim Berners-Lee på CERN. (Den
första webbservern fanns på http://info.cern.
ch och gjordes tillgänglig den 6 augusti 1991.)
Det var en kombination av hypertext och det
globala datornätet Internet, så att länkar i texten
79
8. INTERNET & WORLD WIDE WEB
kunde gå till dokument på en helt annan plats på
nätet.
Varje dokument på webben har ett beteckning som talar om var en webbläsare kan hitta den – en URL (Uniform Resource Locator).
Den kan i ett enkelt fall se ut i stil med
http://stp.lingfil.uu.se/lila/www/. Första
delen http anger schemat – den metod webbläsaren ska använda för att få tag på dokumentet.
Där står http för »hypertext transfer protocol«
– det normala sättet att kommunicera på mellan webbservrar och webbläsare, utvecklat särskilt
för WWW. Delen stp.lingfil.uu.se anger domännamnet för den dator som ska kontaktas. Delen /lila/www/ slutligen är det som skickas till
webbservern på stp.lingfil.uu.se i detta fall
och som anger just vilket dokument på den webbservern som vi önskar. Ibland börjar den delen
med tilde när en viss användares webbsidor ska
nås, inspirerat av hur man betecknar hemkataloger i Unix.
Början http:// utelämnas ofta när webbadresser ges.
vandet av HTML. Det är bland annat en speciell
meny HTML och en SGML .
I en av dem finns ett kommando View Buffer
Contents. Utför det!
Uppgift 8.6 Vad är kortkommandot för det
kommandot?
Uppgift 8.7 När du utför det öppnas filen i
webbläsaren. Vilken URL hamnar du på där?
Klipp-och-klistra från fältet där adressen visas i
webbläsaren.
Uppgift 8.8 En del av det värde som du klippoch-klistrade syns inte där det står i webbläsarens
adressfält, men det syns när du kopierar texten.
Exakt hur lyder den delen?
Så genom att lägga filer i public_html görs de
åtkomliga på webben. Om du får en URL som
börjar med »file:///« så har du inte lagt filen i en
katalog som heter som den ska och ligger där den
ska. Se över det igen i så fall!
8.7
8.5
HTML
Redovisning
Hypertext Markup Language (HTML) är det vanligaste formatet för information på webben och
Checka in en fil ids8.txt på det vanliga stället skapades också av Tim Berners-Lee.
med svar på frågorna. Använd exakt de filnamn
Sedan länge sker arbetet med HTML inom det
som står här för att underlätta rättandet. Bli klar av Berners-Lee grundade World Wide Web Consenast onsdag 7/10.
sortium (W3C).
Det finns flera versioner av HTML samtidigt på
webben. Trots att HTML4 standardiserades redan
8.6 Att publicera på WWW
1997 pågår fortfarande arbetet med HTML5.
Skapa en underkatalog public_html till din hemkatalog, kopiera dit /local/kurs/ids/peppar.
html och öppna kopian i Emacs.
Observera att till skillnad från nästan alla filer
som du gör i denna kurs så ska det inte ligga under
din kurskatalog. Det måste ligga i denna särskilda
katalog för att webbservern ska se filen.
Eftersom detta är en HTML-fil får du nu som
kan vänta sig ett särskilt Emacsläge med menyer
och särskilda kommandon för att underlätta skri-
Internet-historia: Det amerikanska militärprojektet ARPANET från 1969 och framåt är en direkt föregångare till Internet. Samma teknik användes sen i universitetsnätverk och 1983 skapades ett gemensamt nätverk mellan universitet i
hela USA. (Först senare kom även företag in på
nätet.) I Sverige kopplades det svenska universitetsnätet SUNET samman med detta amerikanska universitetsnätverk i slutet av 80-talet. Alltmer
blev det så att olika datornätverk gick över till
samma teknik och förenade sig med andra nätverk
så att det blev ett enda stort Internet.
80
* * *
Jämför innehållet i peppar.html med hur den visas i webbläsaren!
Uppgift 8.9 Första raden i filen är en dokumentdeklaration som talar om vad för slags dokument
det är. Hur lyder den?
Resten av filen består av element där ett element
börjar med en starttagg och slutar med en sluttagg
och har ett innehåll mellan dessa. Starttaggarna
börjar med < och sluttaggarna börjar med </ ,
och båda slutar med >. Elementen kan ha andra element inom sig.
Ett exempel på ett element är <li>2 ägg</li>
med starttaggen <li>, innehållet 2 ägg och sluttaggen </li>.
Uppgift 8.10 Vad är det för element som sträcker sig över hela dokumentet? (Det vill säga börjar direkt efter deklarationen och slutar på slutet.)
Uppgift 8.11 Dess innehåll är uppdelat i två
element som täcker upp allt inom den. Vad är de
för slags element?
8.8. CSS
Uppgift 8.13 Elementet li används inom två
olika andra element. Vilka då?
Just de här reglerna för li är tämligen vansinniga. Nu ska du skriva bättre regler i en annan fil
för olika slags element. (Om du vill kolla lite vad
som händer så kan först du ändra några värden i
ful.css och se vilken effekt det har. Du får ladda
om webbsidan för att det ska märkas.)
Uppgift 8.14 Vad är li förkortning för? (Sök på
nätet!) Och namnen på de två elementen i förra
frågan?
8.8.1
Uppgift 8.12 Vad är det för element som verkar användas för rubriker? (Jämför med hur dokumentet visas.)
fin.css
Uppgift 8.15 För stycken används elementet p. Skapa med Emacs en ny fil fin.css i din katalog
Vad är det stycke heter på engelska som detta är public_html och ändra i peppar.html så att den
använder sig av denna istället för av ful.css.
förkortning för?
När du skriver en rad i CSS-filen så använd TAB
i Emacs för att få lagom stort indrag för olika raStarttaggarna kan ha attribut med värden. T. ex.
der.
används elementet a för att visa vilka delar av siLägg först till detta för att ge regler för elemendan som ska vara länkar till andra webbsidor. Men
tet
footer och ladda sen om webbsidan för att se
det räcker inte med bara
effekten.
På <a>UU</a>!
för att visa att ordet »UU« ska vara en länk. På något sätt måste man också tala om till vilken URL
den länken ska gå. Det gör man med ett värde till
attributet href, så här:
footer {
clear: both;
border-top: 1px solid brown;
padding: 5px;
text-align: center;
}
På <a href="http://www.uu.se/">UU</a>!
Uppgift 8.16 Det finns flera sådana a-element i
peppar.html. En av dem ger en länk till texten
»Blanka av Namur«. Till vilken URL går den länken?
8.8
CSS
CSS är ett språk för att definiera vilken stil olika
delar ska visas med. I peppar.html finns en rad
<link rel="stylesheet" href="ful.css">
som visar att information om detta ska finnas i
ful.css. Kopiera därför /local/kurs/ids/ful.
css till samma katalog som du kopierat peppar.
html till och ladda om sidan i webbläsaren (antingen med en knapp för det, eller med Ctrl-R).
Om du inte får en markant skillnad i utseendet
så har något blivit fel. Kontrollera tidigare steg eller fråga i så fall!
Öppna ful.css i Emacs för att se hur detta har
gått till. Där finns en regel som säger flera saker
om hur a-element ska visas, och sen en regel om
»footer a« vilket betyder bara sådana a-element
som ligger inom ett footer-element.
Uppgift 8.17 Ge exempel på en av raderna
om a och berätta vad den verkar betyda.
Uppgift 8.18 Vad allt detta gör är inte uppenbart, men nämn nån effekt som du direkt märker på den del av dokumentet som ligger inom
footer-elementet?
(px är en liten längdenhet. Du kan söka efter
»css units« på nätet för att läsa om andra enheter
som kan användas i CSS-regler.)
Lägg till en rad där om att texten i footer vara
mindre än huvudtexten. (Jämför med hur storleken ändrades i ful.css. Välj själv hur mycket
mindre texten ska vara.)
Nästa förändring blir större. Själva receptet står
inom ett element section. Skriv en regel
section {
float: left;
width: 40%;
}
och en likadan regel för det element som avsnittet
»Historia« står i, förut att den ska ha right istället
för left.
Om du gjort rätt så har du fått effekten att dessa båda delar visas sida vid sida på 40 % av bredden var. (Resten blir en glipa mellan dem.)
Historietexten är tänkt som extrainformation i
marginalen. Ändra de båda bredderna och minska
storleken på historietexten, så att den tar mindre
plats och inte blir så framträdande.
81
8. INTERNET & WORLD WIDE WEB
8.8.2
Färger
8.9 ids8.html
Skriv en regel
Skriv en egen webbsida ids8.html som handlar
om vadsomhelst utom pepparkakor. Denna nya
body {
HTML -sida ska ha med åtminstone några rubricolor: lime;
ker, några stycken och några länkar till andra sibackground-color: pink;
dor, men du får gärna ha mer. Använd TAB när du
}
skriver för att få så mycket indrag på raderna som
HTML -läget i Emacs tycker är lagom.
för att ändra färg och bakgrundsfärg i dokumentet
Låt en av länkarna gå till din peppar.html. Då
och se effekten. Men även om detta blev väldigt räcker det med att skriva peppar.html som adress
vackert ska du välja andra färger! Gör en webb- till den eftersom den ligger i samma katalog.
sökning på »css color« för att se hur man kan skriTa dessutom med ett par bilder. Det fanns det
va och välj ut andra färger att använda. Eftersom inte i peppar.html (utan bara som bakgrundsbild
den regeln gäller body så gäller den allt som det i CSS-filen). Sök på nätet efter hur man gör sånt!
inte finns mer specifika regler för.
(Du kan lägga bildfiler i samma katalog eller länka
Lägg nu till andra färger för historietexten i till bilder på andra ställen med en längre adress.)
marginalen, så att den skiljer sig tydligare från huSkriv CSS för flera olika element i ids8.html,
vudtexten.
så att den får ett klart annorlunda utseende än vad
den skulle ha utan, men utan att helt planka pepparkakorna för det. Här är några möjliga idéer:
8.8.3 Översta rubriken
• Andra storlekar och/eller färger på rubriker
• Sök upp CSS som inte tagits upp här, till
Nu ska vi sätta en bakgrundsbild till översta ruexempel på http://htmldog.com/guides/
briken »Pepparkakor«. Lägg till denna regel:
css/beginner/.
•
Lägg
till en bakgrundsbild på något annat än
h1 {
h1
background-image: url("...");
Sök på nätet efter »css hover« för att lära dig
background-position: center;
hur man kan skriva CSS-regler som bara gäller när
text-align: center;
background-repeat: no-repeat;
man håller muspekaren över något, och använd
}
detta i någon regel. Det är vanligast att man använder sådant för a-element, så att man tydligt
men där ... är en webbadress till en bild. Välj an- märker att det finns något att klicka på där.
tingen http://stp.lingfil.uu.se/kurs/ids/
gingerbread.jpg eller sök upp en annan bild du 8.9.1 Validering
vill ha. Se efter att du får en bakgrundsbild till
Använd valideraren på https://validator.w3.
rubriken nu!
org för att validera din nya HTML-fil och din
nya CSS-fil. Fixa till vad den eventuellt klagar på!
Uppgift 8.19 Vad
händer
om
inte
HTML har regler om vilka slags element som finns
background-repeat är satt?
och vilka element som får finnas inom vilka. Om
du får fel som har med sådant att göra så läs noga
Ändra så att rubriktexten blir större, och lägg vad det står där!
till lite utfyllnad (padding) som det är för footer,
så att mer av bilden syns. Välj själv hur mycket.
Uppgift 8.20 Har du gjort klart ovanstående
Beroende på vad du har för färg på rubriktexten webbsidor än och sett att valideraren inte klagar
kanske den inte syns så bra mot bilden. Lägg till på dem? (ja/nej) (Denna fråga är till för att jag
regler för h1 som gör att texten syns ordentligt!
ska veta om det är dags för mig att titta på din
webbsida än.)
8.8.4
Validering
Uppgift 8.21 I elementet head i peppar.html
Gå till https://validator.w3.org och knappa finns det två element som inte har sluttaggar. Vilin adressen till din CSS-fil för att få den kollad. ka då?
Om du får en gratulation för att det inte är några Uppgift 8.22 Bland de särskilda kommandona i
fel så grattis! Fixa annars till vad den nu klagar på. HTML-läget i Emacs finns bland annat några för
att lägga in rubriker på olika nivåer. Vad är kortkommandona för dem?
8.8.5 Mer?
Detta räcker för pepparkakorna, men om du vill
lägga till mer regler som du lär dig själv om, så gör
gärna det. Men se till att validera igen efteråt!
82
Uppgift 8.23 Nämn några motsvarigheter eller
nästan-motsvarigheter mellan hur olika slags text
läggs in i LaTeX och HTML.
Kapitel 9
Reguljära uttryck
I kapitel 5 togs reguljära uttryck upp som arguTraditionellt har man skrivit t. ex. [A-Z] för att
ment till grep. I detta kapitel lär vi oss mer om få en versal, och detta (och [a-z] och [A-Za-z])
sådana och om några andra sammanhang där de kan man se på många håll i exempel på reguljära
används.
uttryck. Det är dock säkrare att använda namngivna klasser. Då ska man få man med alla bokstäver,
även t. ex. åäö, oavsett språkinställningar.1
Observera att hakparenteserna ingår i nam9.1 Ett tecken: . [ ] [^ ]
nen på dessa teckenklasser! Det gör att det blir
dubbla hakparenteser i de reguljära uttrycken.
• . = ett godtyckligt tecken
Om man byter ut A-Z mot [:upper:] så be• [abc] = något av tecknen a, b eller c
tyder det att ett reguljärt uttryck som [A-Z]
• [^abc] = ett tecken som inte är a, b eller c
istället blir [[:upper:]] , medan [^A-Z] blir
Inom hakparenteser kan - användas mellan två [^[:upper:]], och uttrycket [z[:punct:] ]
tecken för intervall. Så [0-9] betyder 0, 1, 2, 3, betyder ett z eller ett interpunktionstecken eller
4, 5, 6, 7, 8 eller 9, och [0-9,.] betyder 0, 1, 2, ett mellanslag.
3, 4, 5, 6, 7, 8, 9, komma eller punkt.
De flesta tecken som är speciella annars i regexpar är inte speciella inom []. T. ex. matchar 9.2 Ankring: ^ $ \< \>
[9.*] en nia eller en punkt eller en asterisk. (UtMetatecknen ^ och $ för början av raden respekanför hakparenteserna hade båda punkten och astive slutet av raden har vi redan sett.
terisken haft en särskild betydelse.)
Så med t. ex. ^xyz hittar man rader som börDessutom kan man inom [] stoppa in en be- jar med xyz (radbörjan följt av »xyz«) och med
teckning för en hel klass tecken, som betyder [[:blank:]]$ hittar man rader som slutar med
t. ex. »en bokstav« eller »ett skiljetecken«. Dessa något blankt tecken.
teckenklasser har namn som börjar med [: och
Dessa båda tecken matchar alltså inget tecken
slutar med :], t. ex. [:lower:] för en gemen alls på egen hand, utan ställer bara krav på var det
bokstav. Tabell 9.1 visar några av dessa.
övriga i uttrycket ska befinna sig. Man säger att
Tabell 9.1: Några namngivna teckenklasser. Betydelserna är inte helt strikta här, utan kan variera med
olika locale.
Namn
Betydelse
[:alnum:]
[:alpha:]
[:blank:]
[:cntrl:]
[:digit:]
[:graph:]
[:lower:]
[:print:]
[:punct:]
[:upper:]
[:alpha:] + [:digit:]
[:lower:] + [:upper:]
Blanka tecken (SPC, TAB)
Kontrolltecken
Siffror
Grafiska: [:alnum:] + [:punct:]
Gemena (små) bokstäver
Skrivbara: [:graph:] + SPC
Interpunktion
Versala (STORA) bokstäver
dessa ankrar ett reguljärt uttryck.
Med \< respektive \> matchar man en ordbörjan respektive ett ordslut. Så med \<anti hittar
man »anti« som står i början av ett ord (t. ex. »anti« i »antites« eller »antilop« men inte i »fantisera«).
9.3
Bakstreck: \
Bakstrecket betyder nånting tillsammans med det
tecken som följer direkt efter det. I synnerhet kan
man sätta ett metatecken efter bakstreck när man
verkligen vill söka efter det tecknet.
1 Skriv inte [a-ö] när du menar ’en bokstav’! Dels skulle
det vara beroende av en viss sorteringsordning, och dessutom
funkar det ändå inte som man skulle kunna tro.
83
9. REGULJÄRA UTTRYCK
Så för att söka efter t. ex. en siffra mellan asterisker, som t. ex. »*3*« kan man använda det reguljära uttrycket \*[0-9]\* med bakstreck för
att visa att det verkligen ska vara med asterisker
i texten.
I övrigt används bakstreck följt av annat tecken för lite olika funktioner. Under ankring ovan
nämndes två. En annan användbar är \w där »w«
står för »word«. Det betyder liksom [[:alnum:]]
ett alfanumeriskt tecken, men är kortare att skriva. Så a\wa matchar t. ex. »axa« och »a7a«, men
inte »a!a« eller »a a«.
9.4
Utökade reguljära uttryck
Det finns olika varianter av reguljära uttryck med
lite olika uppsättningar metatecken. Hittills har
vi sett enkla reguljära uttryck (basic regular expressions) där de speciella tecknen är
Om inte det som står före det som visar repetition är något inom [] eller () (som vi kommer
till snart!) så är det ett ensamt tecken som repeteras. Så hej ?hopp matchar »hejhopp« eller
»hej hopp«.
9.6
Alternativ: |
Med lodstreck (|) visar man alternativ.
Så vit|svart|grå matchar »vit« eller »svart«
eller »grå« och foo|b[aä]r matchar »foo« eller
»bar« eller »bär« (eftersom alternativet efter lodstrecket hade två varianter).
Glöm inte att hakparenteser kan användas om
alla alternativ består av ett tecken, så istället för
a|e|i|o|u är det enklare att skriva [aeiou] .
9.6.1
Parenteser: ( )
Med parenteser kan man föra samman ett större uttryck. Så med en (grå liten|stor) katt
Alla andra tecken matchar bara sig själva. Med matchar man »en grå liten katt« eller »en stor
så kallade utökade reguljära uttryck (extended regu- katt«. Utan parenteser skulle det bli allt före ellar expressions) tillkommer dessa speciella tecken: ler efter lodstrecket.
Parenteser är också användbara för att hålla
ihop något som ska repeteras. Det gör t. ex. att
+ ? ( ) { } |
(bar){2,5} matchar »barbar«, »barbarbar«, »barbarbarbar«
och »barbarbarbarbar«.
Kommandot grep använder normalt de enkla
Fler exempel:
(basic) regexparna, men med en väljare -E (som i
• en (grön|blå)+ kavaj matchar t. ex. »en
Extended) använder den de utökade.
grön kavaj« eller »en blågrön kavaj« eller »en
gröngrön kavaj« eller »en blåblågrönblågrön
kavaj«.
9.5 Repetitioner: * + ? {}
• en grön|blå+ kavaj vore däremot något
Asterisken har vi sett förut. Nytt i de utökade
helt annat! Det skulle matcha antingen »en
regexparna är + efter något för att säga att detgrön« eller också något som matchas av
ta något ska förekomma en eller flera gånger. Det
blå+ kavaj , dvs. »blå kavaj« eller »blåå kautökade reguljära uttrycket bä+ matchar därmed
vaj« eller »blååå kavaj« osv.
strängarna »bä«, »bää«, »bäää«, »bääää«, osv., hur
• mo(no)+ton matchar »monoton«, »mononolångt som helst. (Observera att det bara är ä som
ton«, »monononoton«, osv.
repeteras. Detta reguljära uttryck matchar t. ex.
inte »bäbäbä«.)
Skillnaden med asterisken * är att den även till- 9.7 Exempel
låter att den repeterade delen inte är med någon
gång alls. Så bä* matchar samma texter som bä+, Här är några ytterligare exempel på (utökade) remen dessutom även »b«.
guljära uttryck.
Med ? efter något anger man ett det är frivilligt,
• [a-h][1-8] – en ruta på ett schackbräde,
dvs. det kan vara med en gång eller inte alls. Så
som »e2« eller »b4«.
bä? matchar »b« och »bä« och inget annat.
• [0-9]*[13579] – en sekvens med siffror
Med {n} efter något kan man säga att detta nåsom slutar med en udda siffra, som t. ex.
got ska förekomma n gånger. Så [sz]{3} matchar
»4711« eller »007«.
samma som [sz][sz][sz], dvs. »sss«, »ssz«, »szs«,
• (fjor|fem|sex|sjut|ar|nit)ton|tjugo
»szz«, »zss«, »zsz«, »zzs« och »zzz«.
– något av orden fr. o. m. »fjorton« t. o. m.
Med {n,m} ska det vara minst n och högst m
»tjugo«
förekomster, så br{2,5} matchar »brr«, »brrr«,
• (..)* – ett jämnt antal tecken, vilka som
»brrrr« och »brrrrr«, och inget annat.
helst
Maxantalet m kan utelämnas, och 8{3,} betyder minst tre åttor, dvs. »888« eller »8888« eller
• \<pre\w*ing\> – ett ord som börjar med
»88888« eller . . . (Hur många som helst.)
»pre« och slutar med »ing«.
. * ^ $ [ ] \
84
9.8. Olika sorters reguljära uttryck
9.8
Olika sorters reguljära uttryck 9.10
Reguljära uttryck används inte bara av grep utan
dyker upp i flera sammanhang. Av historiska skäl
används dock tyvärr flera olika varianter av reguljära uttryck. Ibland används de utökade (som
grep -E använder), ibland de enkla (som grep
använder normalt) där tecknen + ? ( ) { } |
inte har någon särskild betydelse, utan betyder sig
själva.
(En del program som använder reguljära uttryck har dessutom sina egna utökningar av dem.
Det har t. ex. Emacs och programspråket Perl.
Flera utökningar som har gjorts för Perl har plockats över till andra sammanhang också, t. ex. programspråken Java och Python.)
I grep så kan man komma åt all funktionalitet
som man kan få med + ? ( ) { } | utan att gå
över till utökade reguljära uttryck genom att skriva \+ \? \( \) \{ \} \| istället. Så dessa två
kommandon gör samma sak:
$ grep -E '^(tre|fyr|fem)' verb.txt
trefaldiga
femfaldiga
fyrfaldiga
tredubbla
fyrdubbla
tremulera
trepanera
fyra
treva
$ grep '^\(tre\|fyr\|fem\)' verb.txt
[ samma svar ]
nämligen hittar de rader i den filen som börjar
med »tre«, »fyr« eller »fem«.
grep -o
Kommandot grep arbetar som många andra kommandon normalt med rader. Den fungerar som ett
filter som bara släpper igenom de rader som innehåller ett visst sökuttryck. (Eller med väljaren -v
de rader som inte innehåller ett visst sökuttryck.)
Med väljaren -o ändras detta och man får istället ut just de delar som matchade sökuttrycket
istället för hela rader.
$ grep l.ll verb.txt
lalla
lulla
parallellställa
parallellisera
$ grep -o l.ll verb.txt
lall
lull
lell
lell
Se sökningarna i figur 9.1 där vi söker efter ord
som börjar på »f«. Utan -o spelar det ingen roll
om vi söker efter \<f\w* eller bara \<f . Det är
samma rader (i detta fall bara en rad) som hittas. Men med \w* på slutet hittas hela ordet, vilket gör skillnad när vi använder -o för att få se
vilken del av texten som matchade sökuttrycket.
Det kan (som här) bli flera matchningar per rad.
9.11
Girighet och hunger
Ett sådant uttryck som [1-9]0* matchar ju en
siffra 1–9 eventuellt följt av nollor, t. ex. »5«, »10«
eller »30000«.
$ echo 'Timmy 2000' | grep -o '[1-9]0*'
2000
9.9
Reguljära uttryck i Emacs
Det finns flera kommandon i Emacs som använder reguljära uttryck. Vid sidan av C-s och C-r
som söker framåt respektive bakåt efter en textsträng så finns även C-M-s och C-M-r som söker
framåt respektive bakåt efter ett reguljärt uttryck.
(Här ska alltså både Control och Meta användas
tillsammans.)
Under en inkrementell sökning kan man också
använda M-r för att slå om huruvida sökningen
ska gälla reguljära uttryck eller inte.
Det finns även andra kommandon som ni kommer att möta i inluppen.
De reguljära uttrycken i Emacs är ungefär som
enkla reguljära uttryck, men även plustecknet och
frågetecknet är metatecken.
I exemplet ovan ser vi hur uttrycket matchade
»2000«. Men det skulle ju också kunna ha matchat bara »200« eller »20« eller »2«. Ändå är det
just matchningen »2000« som vi fick fram. Vid
matchningen väljs nämligen den längsta av flera
möjligheter som börjar på samma plats. Man säger att operatorn * här är girig eller hungrig (greedy
på engelska) vilket innebär att den »vill« matcha
så mycket som möjligt. Samma gäller de andra repetitionsoperatorerna vi har tagit upp.
Detta behöver man tänka på ibland, i synnerhet
med .* eller .+ som lätt kan matcha mer än man
egentligen hade tänkt sig. Om man t. ex. vill söka
efter citat inom »« kan det ligga nära till hands att
använda ett reguljärt uttryck ».*« för att visa att
85
9. REGULJÄRA UTTRYCK
$ grep '\<f' saga.txt
ingenting, för han var försäkrad. Några dagar senare flyttade
$ grep -o '\<f' saga.txt
f
f
f
$ grep '\<f\w*' saga.txt
ingenting, för han var försäkrad. Några dagar senare flyttade
$ grep -o '\<f\w*' saga.txt
för
försäkrad
flyttade
Figur 9.1: Greppande med och utan -o i en saga. \<f betyder ett f i början av ett ord, och \w* betyder godtyckligt
många ytterligare »ordtecken« efter det, så tillsammans betyder det ett ord som börjar på f.
det ska börja med », sluta med « och däremellan
får innehålla vad som helst. Men »vad som helst«
kan bli mer än man tänkt sig:
$ cat testfil
Hej hopp!
Ska det stå »i dag« eller »idag«?
$ grep -o '».*«' testfil
»i dag« eller »idag«
Detta svar börjar ju och slutar med de efterfrågade tecknen, men är längre än bara »i dag« som
man kanske snarare var ute efter.
I detta fall är ett sätt att lösa problemet att kräva att tecknen mellan de båda citattecknen inte själva får vara slutcitattecken, dvs. att använda
[^«] istället för . för varje tecken mellan citattecknen.
$ grep -o '»[^«]*«' testfil
»i dag«
»idag«
9.12 sed
Med kommandot sed kan man göra en mängd olika omvandlingar av text. Namnet står för stream
editor. Det kan göra mycket som en editor kan
göra, men gör det inte interaktivt utan genom
att bearbeta text som kommer in i en inputström.
Detta kan läggas in som ett avancerat filter som
läser text från standard input och skriver ut en
editerad version av texten på standard output.
Kommandot sed är lite som en schweizisk
armékniv som kan utföra en mängd olika saker,
86
bland annat sådant som ni har använt andra kommandon till, som head, tail och tr. Här kommer
vi dock att bara använda detta kraftfulla verktyg
till en specifik sak, nämligen att byta ut text.
9.12.1
Att ersätta text med sed
Tidigare har vi använt tr för att byta ut text, men
det är begränsat genom att det bara är enstaka tecken som hanteras. Det duger inte om vi t. ex. vill
byta ut alla förekomster av »foo« mot »bar«. Dessutom har det begränsningar vid hantering av flerbytestecken.
Eftersom ni nu bara kommer att använda sed
till en sak så kommer alla era anrop av sed att
likna varandra. De kommer alla att se ut ungefär
som
sed 's/regexp/replacement/g'
Här är det bara ett argument till sed, och det
talar om vilken editering som ska utföras. Det s
som argumentet börjar med här är ett kommando
i sed för substitute. Det söker upp förekomster av
text som matchar det reguljära uttrycket regexp
och byter ut dessa mot texten replacement.
Så t. ex. kan man skriva
ed och sed: Den ursprungliga editorn på Unix,
som användes redan i forntiden före bildskärmarnas tid, hette ed och var skriven av Ken Thompson. Det var Thompson som först introducerade
reguljära uttryck i editorer.
När kommandot sed kom några år senare som
en variant att använda för icke-interaktiv editering
av en inputström så byggde därför dess kommandon på motsvarande kommandon i ed.
Det enda sed-kommando vi tar upp här, s, finns
t. ex. även i ed.
9.12. sed
sed 's/color/colour/g'
för att byta ut alla »color« mot »colour«.2 eller
sed 's/s\>/z/g'
för att byta ut varje s som står i slutet av ett ord
mot z.
Man brukar normalt använda snedstreck (/)
som här för att avdela argumentet, men det kan
vara något annat tecken istället, bara det är samma tecken på alla tre ställen. Så om man behöver snedstreck i sitt reguljära uttryck eller i ersättningen får man lov att välja nåt annat, t. ex.
sed 's!1/2!½!g'
Kommandot sed använder normalt enkla reguljära uttryck, men har en väljare -r som gör att
den istället använder utökade reguljära uttryck.
(Ja, grep och sed har olika väljare som betyder
»använd utökade reguljära uttryck«. Dumt, va?)
9.12.2
Att återanvända originaltexten
I sed 's/regexp/replacement/g' är det bara
regexp som är ett reguljärt uttryck. I ersättningsdelen har inte asterisker, parenteser osv. någon
särskild betydelse, utan blir sig själva.
$ echo 'byt allt' | sed 's/././g'
........
för att byta alla förekomster av de tre tecknen
$ echo 'foo bar' | sed 's/[aou]/[äöü]/g'
»1/2« mot det enda tecknet »½«.
f[äöü][äöü]
b[äöü]r
Efter det sista snedstrecket står väljare till s$
echo
'hej
hopp' | sed 's/e.*o/***/g'
kommandot. I exemplen ovan är det g som gör
h***pp
att alla förekomster byts ut (global). Annars byts
bara den första förekomsten på varje rad ut. En
annan väljare är i som ignorerar skillnader mellan
versaler och gemener. Jämför följande fyra exemEtt tecken som ändå är speciellt i ersättningspel som bara skiljer sig i vilka av dessa väljare som texten är & (ampersand) som betyder hela den
har använts.
text som matchade det reguljära uttrycket.
Om man ger ett andra argument till sed så är
Om man vill bryta raden efter varje interpunkdet vilken fil den ska hämta input från.
tionstecken kan man därför göra
$ cat jaha.txt
Procent procent procent PROCENT
$ sed 's/procent/%/' jaha.txt
Procent % procent PROCENT
$ sed 's/procent/%/g' jaha.txt
Procent % % PROCENT
$ sed 's/procent/%/i' jaha.txt
% procent procent PROCENT
$ sed 's/procent/%/gi' jaha.txt
% % % %
sed 's/[[:punct:]]/&\n/g'
där
ersättningsdelen
betyder
det
som
[[:punct:]] matchade följt av ett nyradstecken (vilket skrivs \n här precis som t. ex.
i tr).
Följande exempel dubblerar vokaler genom att
använda ampersand två gånger.
sed 's/[aeiouyåäö]/&&/gi'
Varför heter det grep?: I editorn ed användes
reguljära uttryck inte bara med kommandot s, utan även med bl. a. ett kommando g med vilket
man sökte upp rader som matchade ett visst reguljärt uttryck och gjorde nåt med dessa rader. För att
ta bort alla rader som innehåller »foo« kunde man
t. ex. göra g/foo/d där d är ett kommando som tar
bort en rad. För att skriva ut alla rader som matchade ett reguljärt uttryck använde man istället p
(= print).
Ibland förkortas regular expression med re, så en
sådan operation kunde beskrivas g/re/p vilket är
skälet till att det senare skrivna program som utförde just den operationen fick namnet grep.
2 I detta fall behövdes inte några citattecken runt argumentet till sed, eftersom inga tecken där är speciella i skalet,
men oftast behövs det, så det kan vara säkrast att alltid ha med
det.
87
Inlupp 9: Reguljära uttryck
Redovisning
Checka in en fil ids9.txt med svar på frågorna.
Frågorna är samlade i olika teman snarare än att
vara sorterade från lätta till svåra, så hoppa gärna
runt bland uppgifterna medan du löser dem istället för att fastna på någon klurig uppgift som du
kan behöva tänka mer på.
När frågan är i stil med »vilka ord finns det
som . . . ?« så ge dels svar på frågan och tala dels
om hur du fick fram svaret, t. ex. vilket kommando eller vilka kommandon du använt för att få
fram svaret.
Uppgift 9.7 Vilka ord med minst fem tecken
har inte med någon av bokstäverna eantrsildogm?
(De vanligaste tecknen på svenska enligt någon
källa.)
Uppgift 9.8 En del ord i den filen innehåller tecken som inte räknas som ingående i teckenklassen
[:alpha:]. Hur många ord?
Väljaren -o
I dessa uppgifter ska du använda väljaren -o för
att bara få ut det som matchar ett uttryck från en
fil.
Svenska ord
I /local/dict/dsso-list.txt finns en stor
samling svenska ordformer tagna från Den stora
svenska ordlistan. Använd den för frågorna i detta
avsnitt.
Eftersom filen bara innehåller rader med ett ord
per rad kan du använda ^ och $ för ankring till
ordbörjan och ordslut och . för ett godtyckligt
tecken inne i ordet.
Uppgift 9.1 Hur många ord finns det som slutar
på bokstaven v?
Uppgift 9.9 Vilka tecken var det som fanns med
i ordlistan trots att de inte ingår i teckenklassen
[:alpha:] i förra uppgiften?
Uppgift 9.10 Vilka ord i /local/kurs/ids/
wonderland.txt börjar med »cal«? (Rensa bort
dubbletter från ditt svar.)
Uppgift 9.11 Vad finns det för ord som börjar
med versal och slutar med k i samma fil? Använd
\w för att beteckna ett tecken inne i ett ord, och
rensa bort dubbletter från ditt svar.
Uppgift 9.12 Vad finns det för ord som innehålUppgift 9.2 Vad finns det för ord som innehål- ler q i samma fil? (Rensa bort dubbletter från ditt
ler minst tre ä, som t. ex. »självbestämmande- svar.)
rätt«?
Uppgift 9.13 Använd det utökade reguljära utUppgift 9.3 Vilka ord med minst nio bokstäver trycket [0-9]+ för att ta fram vilka sifgår att skriva enbart med tecknen på översta bok- feruttryck som finns i filen /local/kurs/ids/
THE-GNU-PROJECT och sortera dem i nummerordstavsraden på tangentbordet? (qwertyuiopå)
ning. (Rensa bort dubbletter från ditt svar.)
Uppgift 9.4 Vad finns det för ord som är minst
Uppgift 9.14 Skapa en fil GNU-w2 som listar al12 tecken långa vars enda vokal är o?
la ord i filen GNU. Använd denna gång grep -o
Uppgift 9.5 Du håller på med korsordet i fi- med lämpliga argument för att plocka ut orden
gur 9.2. Hur många ord passar in som det översta och rensa bort dubbletter. På vilka sätt blev denvågrätta ordet, med nyckeln »Har vi svenskar rest na ordlista bättre än den GNU-w1 som du skapade
i över 400 år«?
i uppgift 5.60 (s. 58)?
Uppgift 9.6 »Ödeskvinna« i det korsordet
kanske är »norna«, men det skulle också kunna
vara »moira«. Vilka ord passar in på översta
vågrätta ordet om man tar hänsyn till detta
också?
88
En sluttagg i HTML börjar ju med »</« och
slutar med »>«. Prova därför med
grep -o '</.*>' ~ellen/public_html/saga.html
för att ta fram sluttaggar från denna HTML-fil.
Ta sed dit man kommer
Figur 9.2: Utdrag ur ett korsord som författaren har löst.
Uppgift 9.15 En del rader i svaret blev verkligen
sådana, t. ex. »</head>«, men andra rader kom att
innehålla mer. Vad är problemet? Hur kan du fixa
det? Ge ett sorterad lista (utan dubbletter) med
alla sluttaggar som förekommer i den filen.
Uppgift 9.21 Skapa en fil GNU2 i din ids-katalog
som är som GNU, men där du bytt ut varje ord
som är minst två bokstäver långt och som bara består av versaler mot samma ord men med
»<abbr>« före och »</abbr>« efter. Så t. ex. ska
varje förekomst av ordet »MIT« ha bytts mot
»<abbr>MIT</abbr>«.
Ta sed dit man kommer
Uppror! (igen)
Uppgift 9.16 Stavningsreform! Skriv ett sedDessa uppgifter använder sig av den uppror.txt
kommando som byter ut alla »ck« mot »kk«.
som du har sedan tidigare. Använd teckenklasser
Du kan prova ditt kommando med t. ex. när det är lämpligt.
ditt kommando ck-test.txt där ck-test.txt
är en fil som du gjort med lite testord, eller typ Uppgift 9.22 Vilka rader innehåller en liten
echo sicksack | ditt kommando.
bokstav som följs direkt av en stor?
Uppgift 9.23 Hur många rader innehåller minst
Uppgift 9.17 Hur lyder din saga på i-sprikit
tre interpunktionstecken i rad?
(även kallat i-språket), dvs. med alla vokaler utbytta mot i. Svaret ska börja »Dit vir in ging«.
Uppgift 9.24 Vilka rader har minst sex konsonanter i rad?
Uppgift 9.18 Hur lyder din saga om alla mellanslag byts ut mot dubbla mellanslag? Svaret ska Uppgift 9.25 Vilka rader börjar med bokstaalltså börja Det var en gång.
ven c?
Uppgift 9.19 Om Strindberg hade behövt skri- Uppgift 9.26 Vilka rader börjar med ordet uppva Roeda rummet på en engelsk skrivmaskin och drag?
fått lov att skriva aa ae oe istället för å ä ö, hur
Uppgift 9.27 Vilka rader både börjar och slutar
hade då början av den lydit?
med bokstaven r?
Uppgift 9.20 Skriv ett kommando som byter ut
Uppgift 9.28 Vilka rader både börjar och slutar
alla ord »ej« mot »icke« i en text. Se till att du
med bokstaven r, men har inga ytterligare r i sig?
bara byter ut hela ord så att du inte råkar byta
t. ex. »mejl« mot »mickel«.
Uppgift 9.29 Vilka rader innehåller exakt ett w?
89
INLUPP 9: REGULJÄRA UTTRYCK
Uppgift 9.30 Vilka rader har med ord som börjar med »flä«?
Uppgift 9.31 Hur många rader är minst femtio
tecken långa?
Uppgift 9.32 Gör en frekvenslista över vilka interpunktionstecken som förekommer, sorterade i
frekvensordning.
Uppgift 9.33 Vad finns det för parentesuttryck
i uppror.txt?
På en rad står det t. ex.
försvar (och anfall) för att bevara den bästa av
Alltså ska (och anfall) ingå i ditt svar.
En del parenteser börjar på en rad och slutar på
en annan. Dem kan du för enkelhets skull strunta i. (Men har du några idéer om hur du skulle
kunna ta hand om det också, så berätta gärna!)
I Emacs
Öppna filen /local/kurs/ids/wonderland.txt
i Emacs. Det finns ett Emacs-kommando som
heter occur som listar de rader som innehåller
text som matchar ett visst reguljärt uttryck. Detta
kommando finns dock inte i menyerna, så använd
M-x för att köra det kommandot.
Du får sen skriva ett ett reguljärt uttryck. Skriv
uet\> för att lista rader som innehåller ord som
slutar på »uet«.
Uppgift 9.34 Hur många matchingar blev det
och hur visas dessa?
Sökträffarna visas i en buffert som är i ett särskilt Emacsläge där man kan gå direkt till en träff
genom att klicka på den, eller genom att trycka
på RET.
Uppgift 9.37 En av de väljare som användes till
grep-kommandot här var -n. Den har vi inte använt i kursen. Vad betyder den?
Uppgift 9.38 En av träffarna är från filen
nordic-authors.txt. Vilken författare var det
som hittades där?
Upproriska ord
Låt oss se vad det finns för ord i romanen Uppror!.
Denna gång vill vi inte ha sifferuttryck och egennamn som »Fitzschkloff« och »Knöckl«. Vi nöjer
oss med ord som bara består av små bokstäver.
Uppgift 9.39 Skapa en fil uppror-ord.txt med
en svensksorterad ordlista (utan dubbletter) över
ord med bara små bokstäver i uppror.txt.
Många av dessa ord är säkert helt vanliga ord
som finns med till exempel i ordlistan /local/
dict/dsso-list.txt, men andra ord är kanske
speciella för just denna bok.
Uppgift 9.40 Hitta vilka ord som finns med
både i uppror-ord.txt och /local/dict/
dsso-list.txt. Ett sätt att göra det är att sortera
ihop de båda filerna och se vad det blir för dubbletter då. Spara dessa i filen uppror-ord-ok.
txt.
De övriga orden är kanske intressantare, så
låt oss jämföra uppror-ord-ok.txt med hela
uppror-ord.txt!
Kommandot diff visar skillnader mellan två filer. Använd
diff uppror-ord.txt uppror-ord-ok.txt
för att i kompakt form få se alla skillnader mellan
filerna. Det blir rader som börjar med »<« som visar det som bara finns i den första filen. (Raderna
med siffror är för att visa var i filen det är.)
Uppgift 9.35 När man ger ett kommando med
M-x i Emacs får man ett tips i ekoarean om hur
man också hade kunnat ge kommandot om det
Uppgift 9.41 Vad finns det för ord som slutar
finns ett kortkommando för det. Med vilka tanpå p med bland dessa ord?
genttryckningar kan man också ge kommandot
occur?
Uppgift 9.36 I detta särskilda Emacsläge finns Mer( mer)+
det en meny Occur . Vad är det understa kommandot i den menyn, som står ensamt under en linje,
och vad gör det? (Prova det!)
Uppgift 9.42 Hur lyder din saga.txt om man
tar bort alla vokaler? (Svaret ska alltså börja »Dt
Använd nu Tools Search Files (Grep) i samma vr n gng«.)
Emacs. I minibufferten får du ett påbörjat grepUppgift 9.43 Hur lyder din saga.txt om alkommando. Lägg till gren *.txt till det för att
la bokstäver dubbleras? (Svaret ska alltså börja
leta efter »gren« i alla filer *.txt i den katalogen
»DDeett vvaarr eenn ggåånngg«. Bara bokstäver(/local/kurs/ids).
na är dubblerade, men inte mellanslag eller interHär kan du på ett liknande sätt använda muspunktion.)
klick eller RET för att gå till sökträffarna.
90
Mer( mer)+
Figur 9.3:
Från xkcd av Randall Munroe. http://xkcd.com/208/
Programspråket Perl är känt för att använda regexpar mycket.
.
Uppgift 9.44 Hur lyder din saga.txt om sista Uppgift 9.47 Ge ett kort utökat reguljärt utbokstaven i varje ord tas bort? (Svaret ska alltså tryck som matchar både »arton« och »aderton«
börja »De va e gån«.)
(men inget annat).
Uppgift 9.45 Hur lyder din saga.txt om alla versaler sätts inom hakparenteser? (Svaret ska
En möjlighet är helt enkelt arton|aderton,
alltså börja »[D]et var en gång«.)
men gör något kortare!
Uppgift 9.46 Hur lyder din saga.txt översatt
till rövarspråket som blivit känt från Astrid Lind- Uppgift 9.48 Ge ett utökat reguljärt uttryck
grens böcker om Kalle Blomkvist där varje konso- som matchar »mormor«, »morfar«, »farmor« och
nant byts ut mot konsonanten + o + konsonanten. »farfar« (men inget annat).
(Svaret ska alltså börja »DoDetot vovaror enon
gogånongog«.)
Här är mormor|morfar|farmor|farfar förstås en möjlighet, men försök att skriva något kor(Ännu bättre vore det egentligen med »Dodetot« tare!
där bara det första d-et är versalt. Mycket frivillig
överkurs.)
91
INLUPP 9: REGULJÄRA UTTRYCK
Uppgift 9.49 Ta med grep -Eo och lämpliga
argument fram telefonnummer med riktnummer från tidningstexterna i /local/kurs/ids/
ivt2-svenska.txt.
Din lösning kan vara mer eller mindre bra. Ju
fler korrekta nummer du får ut desto bättre, men
undvik att få falska träffar med sånt som inte är
telefonnummer.
92
Kapitel 10
Dokumentrepresentation
Vi har tidigare sett hur rena textfiler (plain text)
representeras för datorn. En teckenkodning ger
varje tecken ett visst numeriskt värde, inklusive
sådana kontrolltecken som nyrad. Vid teckenkodningar med högst 256 olika värden lagras dessa
en i varje byte (som var och en kan ha 256 olika
värden). För Unicode som har många fler värden
lagras tecknen på något sätt där en del eller alla
tecken tar upp flera bytes.
När mer komplicerad information, som ordbehandlingstext, ljud, bild, film, databaser, program
m. m. ska lagras kan det också ske i form av text
på något sätt eller som binärfiler där de olika koderna inte har tecken som motsvarigheter. När
texter lagras i filer eller sänds i kommunikation
mellan datorer gäller det att avsändare och mottagare är överens om vilken kodning som används
så att informationen tolkas som det var tänkt.
10.1
Uppmärkt text
Här är kapitelrubriken uppmärkt och dessutom
meningar. Det finns taggar som visar var de uppmärkta delarna börjar och var de slutar.
En uppmärkning som anger ordklass för alla
ord skulle kunna innehålla t. ex. något som
<pron>Det</pron> <verb>var</verb>
<art>en</art> <subst>afton</subst>
<prep>i</prep> <subst>början</subst>
<prep>av</prep>
<subst>maj</subst><punkt>.</punkt>
10.2
HTML
kommer från SGML
Den här syntaxen med taggar med <> och / var
inget nytt påhitt för HTML, utan använde sig av
SGML (Standard Generalized Markup Language).
Till SGML hör bland annat syntaxen med </>
samt sätt att definiera olika märkspråk genom att
tala om vilka element som kan förekomma och i
vilka kombinationer.
Till HTML-standarderna hör information om
t. ex. att ett ul-element kan innehålla li-element
men inte tvärtom, osv., och valideraren klagade
om du bröt mot några sådana regler.
I praktiken är webbläsare förlåtande och gör
det bästa den kan även när sidor inte är korrekt
HTML , och många sådana fel ger det utseende
man väntade sig i alla fall.
Det går bra att låta bli att skriva ut sluttaggarna
i en del fall. Istället för
I många sammanhang är det vanligt att textfiler är
uppmärkta med taggar som anger att en viss del
av texten ska tolkas eller behandlas på ett visst
sätt.
Ett exempel vi har sett på det är HTML där
uppmärkningen sker med starttaggar som <h1>
och sluttaggar som </h1>. Ett helt uttryck som
<h1>Hej</h1> kallas för ett element, där elementets innehåll är »Hej«.
I andra sammanhang skulle man kunna tänka
sig att andra egenskaper hos texten märktes upp, <ul >
med helt andra taggar. I en del fall har man kanske
< l i >snipp </ l i >
anledning att märka upp varje ord med ordklass.
< l i >snapp </ l i >
I ett annat fall kanske man vill märka upp bara
< l i >snut </ l i >
kapitel och stycken. I ett tredje fall kanske man </ ul >
vill visa exakt hur en viss utgåva av en tryckt skrift
kan man skriva bara
såg ut och märka upp sidor och rader.
En uppmärkning av Röda rummet skulle kunna <ul >
börja
< l i >snipp
<rubrik>Stockholm i
< l i >snapp
fågelperspektiv</rubrik>
< l i >snut
<mening>Det var en afton i början av
</
ul >
maj.</mening> <mening>Den lilla
trädgården på ... och blommor.</mening>
93
10. DOKUMENTREPRESENTATION
Det är eftersom ett li-element inte får finnas
inom ett annat li-element som sluttaggarna kan
utelämnas.
10.3.3
Attribut
Ett element kan även innehålla attribut med värden. Exempel: <name type="person">Melker
Melkersson</name> Här har elementet ett attribut type med värdet person.
10.3 SGML och XML
Man använder dubbla eller enkla citattecken
runt värdena. (I XML måste citattecken alltid vara
SGML är en gammal standard med rötter från
med. Annars är det inte obligatoriskt om det bara
1960-talet, och 1998 kom en variant, XML (Exär snälla tecken innanför. Dettza är ännu ett fall
tensible Markup Language) inspirerad av den.
där XML har gjorts så att det ska vara extra lätt för
XML är gjord för att vara enklare att tolka för proprogram att tolka.)
gram. T. ex. måste alla element alltid avslutas exEtt annat sätt än det tidigare att märka upp en
plicit.
mening med ordklasser skulle kunna vara
XML har blivit mycket populärt i en mängd
<w wc="pron">Det</w>
sammanhang där man har strukturerad text. När
<w wc="verb">var</w> <w wc="art">en</w>
nya märkspråk ska konstrueras så väljer man i all<w wc="subst">afton</w>
mänhet att använda XML. Då får man enhetlig<w wc="prep">i</w>
<w wc="subst">början</w>
het och kan använda sig av en mängd verktyg som
<w wc="prep">av</w>
analyserar och konverterar XML-filer på olika sätt.
<w wc="subst">maj</w><punct>.</punct>
Det har även gjorts varianter av HTML som varit
Här användes en tagg w för ord (word) med ett
XML istället för SGML : XHTML .
Men modern HTML, HTML 5 (standardiserad attribut wc (= word category = ordklass).
i oktober 2015), är inte XML, och är till skillnad från tidigare HTML-versioner inte strikt SGML 10.3.4 Toppnivå
heller, även om det tydligt syns att dess historiska
Ett XML-dokument har bara ett element på toppursprung är SGML.
nivån. Alla övriga element måste finnas i detta
elements innehåll.
10.3.1 Element, taggar och innehåll
Förutom element kan XML-dokument även innehålla en del annat som talar om hur dokumenEtt elements innehåll kan i sin tur innehålla nya
tet ska behandlas i vissa fall, så detta kan stå före
element. Ett litet exempel på texten »Melker
elementet på toppnivån. Sådant står också inom
Melkersson« uppmärkt är
<> men börjar med frågetecken eller utropstec<name><firstname>Melker</firstname>
ken. I synnerhet ska en deklaration i stil med
<lastname>Melkersson</lastname></name>
I exemplet finns det ett name-element som i <?xml version="1.0" encoding="UTF-8"?>
sig innehåller ett firstname-element och ett
komma allra först i dokumentet. Detta visar villastname-element.
Element måste ligga helt inom andra ken version av XML som används och vilken tecelement. Det går inte att låta dem korsa kenkodning detta dokument använder. (Om inget
varandras gränser i stil med <kursiv>Herr sägs om detta så är det UTF-8.)
<name>Melker</kursiv> Melkersson</name>.
Här är det fel vid </kursiv> eftersom name- 10.3.5 Teckenreferenser och entiteter
taggen inte har avslutats än.
Man kan lägga in vilka tecken som helst genom
I XML är det skillnad på versaler och gemener i
att skriva deras Unicode-kod mellan &# och ;. Ett
taggar.
promilletecken (h) kan man t. ex. vid behov beteckna med &#8240;. Ofta använder man hexadecimala beteckningar istället som börjar med x.
10.3.2 Element med tomt innehåll
Då blir t. ex. promille istället &#x2030;. Du förI HTML finns det några element som man aldrig väntas inte kunna räkna med sådana. Det räcker
skriver sluttaggar för, eftersom innehållet alltid är med att känna igen att referenserna kan se ut på
tomt. Man använder t. ex. <br> för ett radbrott den formen också.
och <img ...> för en bild, men avslutar aldrig
Entiteter använder också &; men däremellan
dessa med </br> eller </img>.
skriver man istället ett namn, t. ex. &copy; för ©.
Det ingår i definitionen av HTML vilka element Vilka entitetsnamn som finns är olika för olika
det är som alltid tar slut direkt så att man inte slags XML-dokument, men alltid finns i alla fall
behöver skriva deras sluttagg. I XML måste alla
• &amp; (&)
element avslutas uttryckligen, så i XHTML måste
• &lt; (<)
även dessa element ha en sluttagg, men istället för
• &gt; (>)
<br></br> använder man då kortformen <br/>.
• &apos; (')
94
10.4. MIME
• &quot; (")
eftersom dessa tecken ingår i XML-syntaxen och
därför kan vara besvärliga att få in annars i vissa
fall.
Observera att de numeriska teckenreferenserna alltid sker till Unicode-koder oavsett vilken teckenkodning som XML-filen använder. Även om
man har t. ex. en Latin1-fil med
<?xml version="1.0" encoding="ISO-8859-1"?>
så går det ändå att på detta sätt referera till vilka
tecken som helst.
Det är IANA som håller rätt på vilka beteckningar som är de officiella så att alla använder
samma.
Textfiler använder förleden text och i synnerhet kallas vanlig text text/plain. För text-typer
kan man lägga till en specifikation av vilken teckenkodning som används på detta sätt:
text/html; charset=ISO-8859-1.
Detta används till exempel i post då det i brevhuvudet kan finnas en rad i stil med
Content-Type: text/plain; charset=utf-8
som talar om att brevet innehåller ren text kodad
med UTF-8. (Denna rad ser man vanligen inte, för
program
för att läsa post brukar dölja sådana tekXML är liksom SGML inte ett märkspråk, utan
niska
detaljer,
men ha ett särskilt kommando som
ett sätt att definiera en mängd olika märkspråk
»visa
hela
huvudet«
eller »visa original« som visar
som använder samma grundsyntax men helt oliäven
detta.)
ka uppmärkning. En definition av ett sådant språk
Brev med bilagor har ett särskilt format där
anger inte bara vilka element som ska finnas, utan
varje
bilaga får en egen etikett om vad den har
även hur de förhåller sig till varandra, t. ex. att en
för
format.
(Mailprogrammet väljer ofta vad den
li kan finnas inne i en ul men inte tvärtom för
skriver
där
utifrån filnamnet, så om filen heter
att ta ett exempel från XHTML.
foo.txt
så
får
den en etikett text/plain, osv.
Ett exempel som
MIME -typerna används även på webben, där
<li >
MIME -typen för HTML är text/html. Varje
<ul >Funkar i n t e ! < / ul >
gång en webbserver skickar ut ett dokument
</ l i >
till en webbläsare så skickar den först ut en
är ogiltig XHTML. Men det är fortfarande välfor- innehållsdeklaration med en rad i stil med
mad XML. Med välformad (well-formed) menas Content-Type: text/html; charset=utf-8
bara att man följer de allmänna syntaxreglerna för som talar om vad det är för slags data som den
XML , som t. ex. att alla sluttaggar är avslutade. skickar ut.
Med giltig (valid) menas att man följer de specifika reglerna för ett visst märkspråk. (Så för att
10.4.1 Utan MIME då?
vara giltig måste den till att börja med vara välformad.)
Det finns ingen information i sig i filsystemet om
vad de olika filerna är för slags dokument, så om
man öppnar en fil från t. ex. filhanteraren så får
10.4 MIME
den göra en mer eller mindre lyckad gissning om
vad det är för slags dokument. Dels kan sådana
Program som kommunicerar med varann behöver
program gå efter filnamnsändelsen och t. ex. utgå
vara överens om hur data som de skickar mellan
från att en fil foo.png är en bild i bildformatet
varann ska tolkas. När data skickas så följer det
PNG . Men den kan också titta inne i filen, i syndärför ofta med en etikett på vilken det står vad
nerhet på hur den börjar. I många format börjar
det är för slags data så att mottagaren ska få vefiler alltid på samma sätt vilket gör dem lätta att
ta det. På sådana etiketter använder man ofta ett
känna igen.
standardiserat format MIME för att beskriva olika
Ett skalprogram som känner igen filer på ett såformat. Denna standard utvecklades först för dadant
sätt och beskriver innehållet är file.
torpost, och förkortningen står för Multipurpose
10.3.6
Olika
XML -språk
Internet Mail Extensions, men den används i andra sammanhang också.
$ file rummet.txt latex1.pdf verb.txt
MIME -etiketterna har två delar med snedstreck
rummet.txt: UTF-8 Unicode text
emellan, t. ex. image/jpeg för en bild i JPEGlatex1.pdf: PDF document, version 1.5
format, image/png för en bild i PNG-format osv.
verb.txt:
C++ source, UTF-8 Unicode text
Den första delen anger vad det är för typ av format (som image för bilder) och den andra vilket specifikt format det är. Andra möjliga förHär kan man notera att för den ena textfilen
led är bl. a. audio för ljud, video för video och
application för diverse information som mås- här gissade file fel och tyckte av någon anledte behandlas av något särskilt program, t. ex. ning att verb.txt såg ut att vara ett program i
programspråket C++.
application/pdf eller application/msword.
95
10. DOKUMENTREPRESENTATION
10.5
Komprimering av filer
tar fram det ursprungliga innehållet i filen foo och
skickar vidare det till standard output.
Om innehållet i en fil är repetitivt eller på andTextfiler innehåller mycket redundans och blir
ra sätt delvis redundant så går det att lagra sam- oftast ungefär hälften så stora av att komprimeras.
ma information på mindre plats. I en vanlig text- Många format på binärfiler, som PDF och olika
fil t. ex. så är en del ord och andra teckenföljder bild- och ljudfiler, är redan komprimerade på ett
mycket vanligare än andra, och då kan man på oli- eller annat sätt, och blir därför knappast mindre
ka smarta sätt se till att dessa vanliga teckenfölj- av en ytterligare komprimering.
der lagras på mindre plats än en byte per tecken.
En del program dekomprimerar filer vid behov,
Detta kallas att komprimera en fil.
det gör t. ex. Emacs om man öppnar en kompriI GNU finns programmet gzip (GNU zip) för merad fil.
att komprimera. Filer som är komprimerade med
Den komprimering det handlar om här är sådan
gzip brukar ha filnamnsändelsen .gz och det nor- som går att vända tillbaka. Ingen information går
mala sättet att köra gzip är med ett eller flera fil- alltså förlorad; den tar bara mindre plats att lagra.
namn som argument varpå dessa filer ersätts med Man talar också om komprimerade video-, bildkomprimerade versioner av samma filer.
och ljudformat där information går förlorad (deMed gunzip går man åt andra hållet, dvs. »de- struktiv komprimering, lossy compression). De tar
komprimerar« eller packar upp den komprimera- mindre plats än originalfilerna, men på bekostnad
de filen.
av att ha sämre kvalitet.
Det finns andra komprimeringsprogram med
andra format som också används ibland, t. ex. xz
$ ls
(med filnamn .xz) och bzip2 (med filnam .bz2).
bar foo
$ gzip foo
$ ls
bar foo.gz
$ gunzip foo.gz
$ ls
bar foo
10.6
Filarkiv
I många fall är det praktiskt att skapa ett filarkiv,
dvs. en fil som i sig innehåller en mängd andra
filer. Det kan t. ex. användas för att enklare skicka
en hel mängd filer till någon annan i ett svep.
Man kan packa upp filarkivet och därmed få
Eftersom filnamn kan ha flera punkter är det fram de ingående filerna igen. I förra avsnittet tabara att hänga på .gz på filnamnet även om lades det också om att packa upp, men då gällde
det redan finns en punkt. Så den komprimera- det att packa upp en komprimerad fil för att få
de versionen av ett Javaprogram space.java blir fram originalet igen, vilket inte är samma sak.
I flera format av filarkiv ingår komprimering,
space.java.gz osv.
I en komprimerad fil används alla möjliga vär- men det normala filarkivformatet i Unix, tar, är
den 0–255 och innehållet är en binärfil som inte inte komprimerat, utan ett arkiv är ungefär likan läsas direkt av något program som inte kän- ka stort som de ingående filerna tillsammans. En
ner till just detta komprimeringsformat. När man sådan tar-fil har filnamnsändelsen .tar och ofta
ska använda sig av innehållet i den komprimera- komprimerar man den i sin tur och får då en filde filen är det dock inte nödvändigt att återskapa namn som slutar med .tar.gz.
För att hantera sådana filarkiv använder man
originalfilen på disken igen, utan man kan ta fram
innehållet med zcat. Kommandot zcat foo.gz kommandot tar.1
compress och gzip: gzip är ett fall där GNU inte helt efterliknar Unix. Det normala komprimeringsprogrammet i Unix var nämligen ett program
compress som komprimerar med en annan metod. För GNU kunde man dock inte lagligen skriva en ersättning av det programmet eftersom den
komprimeringsalgoritm som användes var skyddad av ett patent sedan 1985. Istället fick man lov
att använda en annan metod.
År 2003 gick det patentet ut, så sedan länge
finns det fria program som implementerar den
gamla algoritmen, men gzip fortsätter att vara det
vanligaste sättet att komprimera filer i GNU.
96
$ tar -c -f texter.tar *.txt
$ rm *.txt
$ tar -x -f texter.tar
Första väljaren är -c för att skapa ett arkiv (Create), väljaren -f ska ha ett argument som är arkivfilen (i detta fall texter.tar) och som argument
ger man vilka filer och kataloger som ska läggas i
1 Om man ska dela med sig av ett filarkiv till någon i
MS Windows-världen kan det vara bättre att använda zip och
unzip som använder ett annat format istället. Se deras mansidor!
10.6. Filarkiv
arkivet (här *.txt). De ursprungliga filerna ligger
kvar.
I det andra fallet är förstaväljaren -x för att packa upp ett arkiv (eXtract). Filerna som togs bort
med rm återställs.
Med en väljare -v blir tar mer pratig (verbose)
och talar om namnet på varje inblandad fil.
Eftersom det är så vanligt att man komprimerar
tar-arkiv med gzip så kan tar med -x ta hand om
det steget själv, och det räcker med
$ tar -xvf foo.tar.gz
för att packa upp ett komprimerat tar-arkiv.
I detta exempel fördes väljarna -x, -v och -f
ihop. Då får man lov att sätta -f sist så att man
kan ge ett argument till den väljaren.
Den vanliga kombinerade ändelsen .tar.gz ersätts ibland med bara .tgz, speciellt i andra filsystem som inte klarar flera punkter i filnamnen.
tar = tape archive: Den ursprungliga användningen av tar var att lagra en mängd filer på
ett magnetband och därav kommer kommandots
namn.
97
Inlupp 10: Dokumentrepresentation
Redovisning
De olika raderna i filen börjar med indrag med
olika många mellanslag för att det ska bli lättare
Denna gång ska du skicka svar på frågorna i mail att läsa så att man ser hur strukturen är. Ett protill Per igen, senast onsdagen den 14/10. Med det- gram som förstår sig på XML och som ska göra
ta mail ska du också skicka en bilaga med ett kom- något med denna fil kommer inte att bry sig om
primerat tar-arkiv som innehåller de filer som du hur indragen är, men det är bra om filen är nåändrat i enligt instruktionerna. Texten med själva gorlunda läsbar för människor också!
svaren kan ligga i huvuddelen av mailet, eller vara
Detta kan Emacs ordna åt dig. Teveprogramen bilaga den också, men är det en bilaga så se till met Rapport saknar starttid. Gå till den tomma
att den skickas med en etikett som talar om att rad där det borde stå och tryck TAB så får du ett
det är en text. (Så ska det bli automatiskt om du lagom indrag. TAB fungerar så i de flesta Emacsger filen ett namn som passar en textfil.)
lägen, att istället för att alltid gå fram lika långt så
går det fram »lagom« långt för det som man just
editerar. (Det kan användas både för en ny rad
Packa upp filerna
som här, eller för att ändra indraget på en rad som
redan finns.)
De filer du ska använda i denna labb ligger i
Skriv nu in <starts>18:55 (precis så, utan
filarkivet /local/kurs/ids/xml.tar.gz. Packa sluttagg). Nu blir det Invalid i informationsraupp det i din kurskatalog. Alla filer i filarkivet lig- den igen. En finess i detta Emacsläge är att det
ger i en katalog xml så du får en ny underkatalog hela tiden kollar av ifall du har en korrekt XML-fil
med detta namn med filer som du ska använda i eller inte. Med rött visas var det finns fel.
denna labb. (Gör ingen kopia av arkivfilen först.)
Uppgift 10.1 Vad gav du för kommando för att
packa upp filarkivet?
Uppgift 10.3 Var visas det vara fel? Varför just
där?
Ta fram hjälpen för denna Emacs-mode. (Se tabellen på s. 61 eller Help Describe i menyerna om
du har glömt hur man gör det.)
XML i Emacs
I den hjälp du får upp nämns ett kommando
Öppna filen svt2.xml där i Emacs. Innehållet är som avslutar det aktuella elementet genom att
tydligen en tevetablå i nåt XML-format.
lägga in en sluttagg.
Uppgift 10.2 Vad har elementet på toppnivån i
detta dokument för starttagg?
Uppgift 10.4 Hur utför man det kommandot?
(Gör så!)
Notera härnäst att det står (nXML Invalid) i
informationsraden. Det första inom parentesen
är som vanligt namnet på det editeringsläge som
Emacs befinner sig i. Tillägget Invalid betyder
i detta fall att det är en ogiltig XML-fil. Detta
Emacsläge använder sin kunskap om XML-syntax
för att markera när syntaxen inte stämmer. Emacs
vet inte vad det är för slags XML i denna fil, men
eftersom innehållet inte ens är välformad XML så
kan den ändå vara säker på att den är felaktig.
Ett sätt att direkt flytta sig till felet är att klicka
på detta ord Invalid. Rätta felet! Snart ändras
Invalid till Valid.
Nu bör bufferten ha blivit Valid igen. Med
detta menas än så länge bara att det är välformad
XML eftersom Emacs bara vet att detta är XML
men inte vet vilket särskilt XML-märkspråk det
är.
Detta speciella märkspråk för tevetablåer beskrivs i filen schedule.rnc i samma katalog. Tala
om det med XML Set Schema File. . . och ange den
filen. Du får en förfrågan »Save schema location
to . . . « Svara y! Nu minns Emacs vilket schema
som gäller för denna fil.
Där beskrivs en ganska petig syntax för hur de
olika delarna av en sån här tevetablå måste se ut
98
schedule.rnc
och denna fil stämmer inte riktigt med denna syntax.
Så nu hittas flera fel. Tryck på Invalid i informationsraden för att gå till det första felet. Med
C-c C-n kan du gå till nästa fel. Varje gång du
går till ett fel så kommer det ett litet meddelande
om vad felet är i ekoarean. För att gå till det första
felet utan att behöva använda musen kan du använda M-< eller <C-home> för att gå till början av
bufferten innan du går till nästa fel.
Rätta alla felen! Exakt hur syntaxen måste vara
här bör framgå av de exempel som inte ger fel.
Lägg till ett par program i slutet av tablån. (Hitta på nåt.) Använd TAB för indrag så att delarna i
ditt programinslag får samma indrag som de övriga.
Se till att din slutliga fil är »valid«.
(Det står på två rader här i kompendiet bara
för att spalten är så smal.) Detta talar om att filen
tv.css i samma katalog ska ge information om
hur olika element ska visas med samma språk CSS
som du såg i kapitel 8. Se efter att filen nu visas
annorlunda i Firefox!
Uppgift 10.6 Vilket attribut har satts till vilket
värde i tv.css?
Uppgift 10.7 Vad betyder det om hur ett sådant
element ska visas? (Sök på nätet.)
Uppgift 10.8 Vilket värde är default för det attributet? (Sök på nätet.)
Lägg till saker i tv.css så att det blir en fin spalt
med en tevetablå. Sätt en ganska smal width för
hela schedule så att det påminner om en spalt
i en tidning. Ändra så att tid och titel för programmen markeras med annan slags text, kanske
schedule.rnc
med font, font-weight eller font-size. Se till
Titta i den där filen schedule.rnc som beskrev att beskrivningen börjar på ny rad. Sätt färger och
formatet. Det finns olika sätt att beskriva syntax- padding och/eller margin som du vill ha dem.
Som överkurs kan du läsa på om CSS (t. ex.
en för ett viss slags XML-dokument. Detta kallas för RELAX NG. Detta format är inget du be- på http://w3.org/) och komma på ett sätt att
höver lära dig, men många delar av det bör ändå använda något av den information som står som
framgå tydligt med tanke på hur filen såg ut. Se i attributvärden i filen, t. ex. skriva »(På finska.)« i
synnerhet på det pattern som definieras där för att slutet av program som har lang="fi".
beskriva vad elementet starts får ha för värden.
Detta är ett (utökat) reguljärt uttryck och det
godkänner inte bara tider som »17:15« utan också Bildfiler
t. ex. »12:75« och »55:15« som inte är riktiga tider.
/usr/share/shotwell/icons/ innehåller en del
Förbättra detta reguljära uttryck så att det inte bildfiler som används av fotohanteraren Shotwell.
godkänner sådana felaktiga tider! När du har ändrat i schedule.rnc måste du sätta filschemat för Uppgift 10.9 Filerna har fyra olika filnamnsexsvt2.xml på nytt för att den ska använda den nya tensioner. Vilka då? (Två av dem finns det bara en
filen ifall du vill prova att ditt reguljära uttryck var av.)
fungerar som avsett.
(Prova gärna med lite felaktiga tider, men glöm
Om man öppnar en bildfil i Emacs så visas den
inte att återställa till korrekta tider efteråt, så att som en bild, men man kan ändra så att den visas
det du lämnar inte innehåller några fel!)
»som text«, tecken för tecken istället.
CSS
för XML
Öppna din svt2.xml i Firefox (med File Open File
i Firefox, eller från filhanteraren). Dokumentträdet visas utan någon särskild formattering eftersom webbläsaren inte vet något om hur dessa
element ska formatteras. Den vet bara att detta är
XML (på grund av filnamnet).
Uppgift 10.10 Vad kan man trycka i Emacs för
att slå om (toggle) mellan att visa som bild och
visa som text?
Uppgift 10.11 Vilka av de olika bildformaten
som används i den katalogen är binärfiler och vilka är textfiler? Det finns minns en av varje slag.
Uppgift 10.12
na katalog?
Vad säger file om filerna i den-
Uppgift 10.13 För ett av de fyra formaten säger
Uppgift 10.5 Firefox skriver något just om att file hur stor bilden är också. Vilket?
den inte vet vad det är för slags XML. Vad står
Uppgift 10.14 Det finns en väljare till file som
det?
gör att den skriver ut en MIME-beteckning istället.
Hur lyder den väljaren?
Lägg in följande på en rad som andra rad i filen:
Uppgift 10.15 Vilka är de fyra olika MIMEbeteckningarna för filerna i denna katalog enligt
<?xml-stylesheet type="text/css"
detta?
href="tv.css"?>
99
INLUPP 10: DOKUMENTREPRESENTATION
Lite ljud som omväxling
Uppgift 10.23 Hur kan man skriva q{0,1}
enklare i ett utökat reguljärt uttryck?
Uppgift 10.16 Vad säger file om ord.flac i
din kurskatalog?
Uppgift 10.24 I sagobok.tex gjorde Per (dvs.
användaren starback) en ändring den 5 oktober.
Hur beskrev han den ändringen i filens logg?
Detta är ett binärt format, men trots det så finns
det några koder som direkt motsvarar tecken i
början av filen. Öppna den i Emacs!
Uppgift 10.25 Kommandona för versionskontroll i Emacs börjar med C-x v. Ett av dem är
till för update. Vad heter det i menyerna och vad
har det för kortkommando?
Uppgift 10.17
flac-filen?
Vilka är de fyra första tecknen i
Större delen av filens innehåll motsvarar kontrolltecken sedda i textformat som visas med koder i Emacs. I synnerhet är ^@ en beteckning på
kontrolltecknet NUL som har koden 0. Man kan
se att rätt många bytes har värdet 0.
Ett komprimerat ljudformat som fyller ungefär
samma nisch som MP3 men inte är lika vanligt
heter Ogg Vorbis. Det finns ett program oggenc
som skapar sådana Ogg-filer som brukar ha filnamnsändelsen .ogg. Skapa en fil ord.ogg utifrån
ord.flac. (Du får själv hitta lämplig dokumentation om hur detta görs.)
Uppgift 10.18
Hur skrev du för att göra detta?
Det finns en väljare som sägs sätta kvaliteten för
kodningen av oggarna. Skapa en ny fil ord-good.
ogg som kodar ord.wav till en ogg enligt den bästa kvaliteten man kan ställa in med den väljaren
enligt dokumentationen. Du behöver även en väljare som talar om vad output-filen ska heta.
Uppgift 10.19
att göra det?
Använd det när du är i sagobok.tex eftersom du
ska ändra något där. Detta kan vara mer praktiskt
än att skriva svn update eftersom innehållet i
Emacs uppdateras på samma gång.
Uppgift 10.26 Din saga har ju ditt användarnamn som rubrik. Ändra den rubriken till nåt som
passar innehållet i just den sagan istället. TEXa filen tills din titel syns även i innehållsförteckningen och checka sedan in din ändring.
Filen /local/kurs/ids/japansk.txt är inte
kodad med UTF-8. Gör man cat japansk.txt
får man därför ut en konstig ojapansk sörja i terminalen.
Den filen har en rad i början som talar
om för Emacs vad det är för teckenkodning:
-*- coding: euc-jp -*Uppgift 10.27 Använd samma beteckning »eucjp« för att med iconv omvandla från denna teckenkodning. Svara med ett kommando som skriver ut texten rätt i terminalen. Svara också med
den text som det blev då.
Vad gav du för kommando för
Uppgift 10.20 Hur beskriver kommandot file
de båda ogg-filerna du har nu? (Använd joker.)
(Om det inte är som nånting med »Ogg« så har
du gjort fel.)
Skapa komprimerat arkiv
När du mailar svaren på dessa uppgifter ska du
även skicka med ett komprimerat tar-arkiv med
de filer som du har ändrat.
Filerna som ska vara med i arkivet är svt2.xml,
Uppgift 10.21 Visa storleken i bytes för alla
schedule.rnc, tv.css, ord.ogg och ord-good.
dessa tre dessa ljudfiler med ett kommando.
ogg.
Ett sätt skulle vara att först skapa ett tar-arkiv
ord-good.ogg borde ha blivit större än ord.
med
tar och sen komprimera det med gzip, men
ogg, så är det inte så har du gjort något fel. (Om
det
finns
en väljare till tar som direkt fixar komdu vill lyssna på de olika filerna (ogg och flac)
primering
också. Ta reda på den och använd den.
för att se om du hör någon skillnad är ett sätt att
göra det med kommandot play.)
Uppgift 10.28 Vad använde du då för kommando för att skapa det komprimerade tar-arkiv som
du skickar med som bilaga?
Diverse
Du behöver både välja ett lämpligt filnamn för
Uppgift 10.22 Vilket ord i filen /local/texts/ ett sådant komprimerat filarkiv, och använda en
jabberwocky innehåller bokstaven x? (Lös upp- väljare som gör att det blir ett sådant som skapas!
giften med bara ett grep-kommando med väljaren -o.)
100
Kapitel 11
Program
Ett datorprogram är en samling instruktioner som
beskriver något som en dator ska utföra.
11.1
Skript
På s. 33 fick du skapa skalskript – textfiler med
flera skalkommandon efter varann – och köra dem
genom att skriva bash filnamn . Genom att ge ett
filnamn som argument till skalet (bash) talar man
om att det ska hämta kommandon från den filen.
På s. 58 fick du sedan se hur man kan ge argument
till ett sådant skript.
Detta är ett slags enkla program.
På samma sätt kan man köra t. ex. ett program
i programspråket Python (brukar ha namn som
slutar på .py) med python filnamn.
11.2
skalskript. Ett särskilt program, en interpretator,
läser och utför dessa instruktioner.
(Det finns även mellanlägen mellan kompilering och interpretering.)
Interpreterande och
kompilerande programspråk
De flesta program man kör är dock inte textfiler utan binärfiler. De innehåller då instruktioner
i en maskinnära form (maskinkod) som kan utföras (exekveras, köras) direkt av datorn. Med datorprogram kan man avse både en sådan binärfil,
och även källkoden, så som programmet skrivits i
något programspråk i en eller flera textfiler.
I de flesta programspråk skriver man instruktioner som ligger långt ifrån den typen av instruktioner som datorn kan utföra direkt. Det finns olika
sätt att då få datorn att utföra instruktionerna i
källkoden: kompilering och interpretering.
Kompilering är att översätta källkoden till maskinkod. Översättningen sker med en kompilator –
ett särskilt program. Sen kör man den resulterande koden. (Källkoden behövs inte längre för att
kunna köra programmet. Men om man behöver
göra ändringar i programmet behöver man källkoden igen och får lov att kompilera om den efteråt.)
Interpretering är att tolka källkoden bit för bit
istället, så som skalet tolkar kommandon i ett
11.3
Att köra program
Programmen är filer de också. Om man t. ex. kör
bildbearbetningsprogrammet Gimp så är det filen
/usr/bin/gimp man kör. Det skulle gå att skriva
den fullständiga sökvägen /usr/bin/gimp för att
köra det programmet, men det räcker med bara
gimp. Om man skriver bara ett namn utan katalog så letar nämligen skalet efter en sådan fil i
vissa kataloger (däribland bland annat /bin och
/usr/bin). Där ligger de flesta av de program du
använt hittills, som t. ex. cat, grep, ls, sed osv.
Om programfilen inte ligger i en av dessa kataloger måste man skriva ett längre filnamn där man
tar med katalogen, med en fullständig eller relativ
sökväg.
Observera att skalet inte söker efter filen i aktuell katalog i sådana fall, som annars när man skriver ett filnamn utan katalog.
11.4
Att kompilera program
För att kompilera ett program så kör man i de
enklaste fallen en kompilator med källkodsfilen
som argument. Kompilatorn skapar en ny fil som
går att köra.
Ett större program består normalt en mängd filer som använder sig av varandra på komplicerade
sätt, och för att kompilera detta kan det krävas
flera steg. I Unix-världen används oftast ett program make för att göra detta. Det utför alla dessa
steg i rätt ordning för att tillverka vissa filer. I en
fil Makefile har man skrivit regler som talar om
för den vad den ska göra. Man kan ge argument
till make som talar om vad det är man vill »tillverka« med det, men bara make utan argument
duger ofta.
101
11. PROGRAM
11.5
Att installera program
På en GNU-dator som man själv administrerar är
det i allmänhet enklast att inte kompilera program man ska använda, utan istället installera färdigkompilerade program som färdiga paket med
filer som läggs ut på rätt ställen på disken. Program som sköter sådant kallas pakethanterare.
Detta förutsätter att någon har gjort ett sådant
paket som passar till ens system, men är det ett
välanvänt program så är det antagligen så. Ett par
vanliga paketsystem är APT och RPM. Vårt system använder det sistnämnda av dessa.
Men som vanlig användare utan administratörsrättigheter så kan du oftast inte använda dig av sådant eftersom du inte har rätt att lägga filerna på
de centrala ställen där de då är tänkta att hamna.
Då får du ofta lov att installera program någonstans under din hemkatalog genom att kompilera dem själv. (Så kan det också vara för att ingen
har gjort nåt behändigt paket av just det programmet.) Programmen distribueras då i allmänhet i
form av ett (komprimerat) filarkiv som källkoden
finns i. Du börjar med att packa upp detta filarkiv
och sen se efter om det bland filerna finns någon fil README med allmänna instruktioner eller
kanske en fil INSTALL med instruktioner om hur
du ska installera programmet. (Dessa filer heter
ofta just så, med versaler.) Ofta säger instruktionerna att du ska använda make på något sätt.
hemkatalog kan man förstås använda hemkatalogen själv: Med --prefix ~ hamnar själva programmen i ~/bin osv.1
Det kan även finnas andra saker man ställer om vid konfigureringen med olika väljare till
configure.
11.6
Upphovsrätt och licenser
Upphovsrätt gäller för program, både för källkod
och maskinkod, precis som för litterära och konstnärliga verk. Inga som har skrivit program för moderna datorer har dock varit döda i sjuttio år så att
upphovsrätten har gått ut för deras verk, så som
skett för t. ex. Strindberg och Lenngren.2
Trots det finns det en mängd program som det
står en fritt att använda, kopiera och sprida, eftersom programmens författare uttryckligen givit
en tillstånd till detta. Sådant sker i form av en licens där upphovsrättsinnehavarna talar om vad de
tillåter.
I synnerhet är hela operativsystemet GNU sådan »fri programvara«, men för att komma till
GNU går vi via Unix.
11.6.1
Unix
Operativsystemet Unix skapades i slutet av 1960talet på Bell Labs i USA.
I mitten av 1970-talet började det spridas utanför Bell Labs. Det såldes rätt billigt (speciellt till
11.5.1 Att installera med make
universitet) och gick att köra på relativt billiga daI GNU har det utarbetats en standard för hur
torer (vid en tid när datorer var stora och dyra),
installation går till. Med distributionen av provilket bidrog till dess popularitet. Dessutom följgrammet följer det med ett skalskript configure
de källkoden med så att man kunde se precis hur
som man börjar med att köra. Det skapar en fil
det fungerade och även införa egna ändringar i syMakefile som är särskilt anpassad för det system
stemet. Det ökade populariteten ännu mer i den
man kör på. Efter det kan man kompilera proakademiska världen, där en mängd universitet angrammet med make och sedan installera det med
vände Unix i undervisningen i datorvetenskap.
make install . I det sista steget kopieras filerna
Möjligheten att göra ändringar i koden ledde
ut till olika ställen i filsystemet.
till att det uppstod en stor mängd varianter av
De tre kommandona kan vara
Unix. En viktig variant var BSD (Berkeley Software Distribution) från University of California,
Berkeley. Berkeley spred sina tillägg och föränd$ ./configure --prefix ~
ringar fritt, och många använde dessa.
$ make
På 1980-talet tillverkade flera företag olika en$ make install
användardatorer med Unix – arbetsstationer. De
var mycket kraftfullare och dyrare än den tidens
vanliga persondatorer, och använde olika versioNormalt läggs program i /usr/local/bin/, ner av Unix. De olika tillverkarna skickade med
man-sidor i /usr/local/man/ och diverse and- olika tillägg från BSD och andra håll, och skrev
ra filer i några andra underkataloger till /usr/ också mycket egna tillägg (som inte spreds fritt),
local. Men där har vanliga användare inte rätt
1 Tidigare har jag skrivit att det normala sättet att ge
att lägga filer, så det kommer inte att funka om
man inte är administratör! Med --prefix ovan argument till långa väljare är med ett likamedtecken, som
till configure talar man om var programmet --prefix=~/foo, men just i detta fall ställer det till problem
eftersom skalet bara ersätter ~ med ens hemkatalog när det
och alla dess filer ska installeras, så med t. ex. står först i ett argument.
2 Detta är förstås skälet till att texter av dessa figurerat i
--prefix ~/foo installeras själva programmen i
~/foo/bin/ osv. Istället för en katalog under ens flera övningar.
102
11.6. Upphovsrätt och licenser
så de olika Unix-systemen skilde sig åt. En viktig del var fönstersystemet X som spreds fritt från
Massachusetts Institute of Technology (MIT) där
det var skrivet. Även till detta lade de olika tillverkarna till olika nya finesser, så på olika datorer
körde man lite olika versioner av X.
Fönstersystemet X kallas också ofta för X11,
eftersom det är version 11 av det som man använder, och det har ingenting med det mycket senare
OS X att göra.
11.6.2
GNU och fri programvara
När Unix var nytt hade de flesta av dess användare möjlighet att läsa koden för att lära sig hur
den fungerade och även möjlighet att införa egna
ändringar för att få delar av systemet att bete sig
annorlunda. Med tiden hade det blivit allt ovanligare. De flesta Unix-användare kom att sitta vid
arbetsstationer som till stora delar var som svarta
lådor som man inte hade insyn i. Det uppfattades
av många som frustrerande vid en tid när en stor
del av datoranvändarna var programmerare själva.
1983 utannonserade Richard M. Stallman på
MIT planer på att skriva ett fritt operativsystem
som skulle få namnet GNU. Eftersom Unix redan
då hade en så stark ställning så valde han att det
skulle vara Unix-kompatibelt, dvs. bete sig som
Unix trots att det inte var Unix. GNU stod för
»GNU’s Not Unix«.
Snart startades en särskild stiftelse, Free Software Foundation (FSF), för att hålla i projektet
och även i övrigt verka för fria program.
En del program som redan fanns och som var
fria kunde användas. T. ex. bestämde Stallman tidigt att man inte behövde skriva ett nytt fönstersystem eftersom fönstersystemet X var fritt. En
del tillägg till Unix som skrivits på Berkeley och
andra ställen var också möjliga att återanvända.
Men den största delen av koden fick man skriva
själva.
11.6.3
Linux
Många delar av GNU kom snabbt till, och användes som separata delar på andra Unix-system,
men en viktig del som kom på efterkälken var den
mest centrala delen av operativsystemet, kärnan.
Utan den var det inte möjligt att sätta ihop ett
helt GNU-system.
1991 offentliggjordes Linux av den finlandssvenske studenten Linus Torvalds. Det var ett
litet Unixliknande system, framförallt inspirerat
av Minix, ett tidigare minimalt Unixliknande system, gjort särskilt för undervisning i operativsystem av Andrew S. Tanenbaum i Nederländerna.
Inom kort sattes hela GNU/Linux-system samman som använde Linux som operativsystemskärna istället för HURD som var den fortfaran-
de bara halvfärdiga kärna som skulle användas i
GNU. Oftast kallas sådana system bara för Linuxsystem, efter den kärna som används.
Detta gick att köra på vanliga persondatorer,
som annars oftast körde MS-DOS från Microsoft.
Persondatorerna hade med tiden blivit så pass
kraftfulla att de kunde klara ett mer krävande system.
11.6.4
Unix och Unix-liknande system
idag
En stor del av Unix-liknande system idag är fri
programvara.
Det finns nu en mängd olika distributioner av
GNU/Linux som publiceras av olika företag och
organisationer. Dessa skiljer sig åt mer eller mindre mycket beroende på vilka val distributörerna
har gjort angående vilka program som ska vara
med och inte vara med.
Några av de populärare distributionerna är Debian GNU/Linux, Ubuntu, Red Hat Enterprise
Linux, Fedora, Centos, Linux Mint, openSUSE
och Gentoo.
Dessa är Unix-kompatibla, men de är inte Unix,
dvs. de är inte licensierade att använda varumärket Unix, som ägs av The Open Group. Det är
däremot kommersiella Unix-versioner som AIX,
HP-UX, IRIX, Solaris, Tru64, A/UX och OS X.
Alla dessa olika system skiljer sig åt på en
mängd små sätt. Det har gjorts flera försök att
få dem att närma sig varandra för att underlätta
flyttandet av program från ett system till ett annat, och bland annat genom standarderna POSIX
och Single Unix Specification (och genom att en
del kommersiella system slagits ut på marknaden)
är dagens Unix-system mycket mer lika varandra
än hur det var för ett par decennier sedan.
11.6.5
GNU GPL och »Copyleft«
Många fria program finns det ofria varianter av. Så
är det t. ex. med fönstersystemet X från MIT och
med de Unix-tillägg som gjordes för BSD. Företag
©
Figur 11.1: Copyleft-tecknet har bildats genom att
spegelvända copyright-tecknet.
103
11. PROGRAM
har vidareutvecklat dessa fria program men inte
gjort sina nya versioner till fri programvara. Den
som har använt dessa versioner har inte t. ex. kunnat läsa eller ändra i programmet de kört, trots att
den ursprungliga versionen var fri programvara.
De som skrivit dessa program hade inget emot
detta, men för GNU ville man inte ha det så. Man
ville att alla som använde de program man skrev
skulle använda fria versioner av programmen.
För att de program som skrevs för GNU skulle
fortsätta att vara fria för alla som använde dessa program skrev man en ny licens, GNU GPL
(General Public License), där en av de viktigaste
nyheterna var något som man kallade för copyleft.
Det innebär att man inte tillåter att någon sprider modifierade versioner av programmet om inte
dessa ändringar också sprids med samma villkor.
Den som delar med sig av program enligt GPL
till en grupp människor ser alltså till inte bara att
programmet är fritt för den gruppen, utan även
för dem som den gruppen i sin tur sprider vidare
programmet till. Ibland använder man ett spegelvänt copyright-tecken (figur 11.1) för detta.
Med tiden har det skapats fler licenser för fri
programvara med lite olika egenskaper, men GPL
är den klart vanligaste inte bara för sådant som
skrivits direkt för GNU, utan även för t. ex. kärnan Linux och webbläsaren Firefox. Istället för att
formulera dessa villkor själv brukar man i allmänhet använda någon av de licenser som redan har
formulerats. Ett skäl är att det underlättar mycket för den som vill använda programmet om en
välkänd licens som man redan känner till har använts. Ett annat är att det underlättar återanvändning av delar av programmet tillsammans med delar av andra program som använder samma licens.
Licenser för icke-fria program är i allmänhet utformade som avtal eller överenskommelser mellan två parter. För att få komma åt programmet
så förbinder man sig till att uppfylla vissa villkor.
En licens som GNU GPL fungerar inte så, utan är
helt enkelriktad. Det finns ingenting som man behöver gå med på för att använda ett GPL:at program. Allt den licensen gör är att öka vilka rättigheter användare har, genom att uttryckligen göra
vissa saker tillåtna som annars inte hade varit det
på grund av upphovsrätten.
Figur 11.2: Byggblock i Creative Commons-licenser.
11.6.7
Annat än program
Programförfattares fria spridande av sina program
har varit en inspiration även för fritt spridande av
andra upphovsrättsligt skyddade verk, som texter,
bilder och musik. Ett exempel är ett stort samarbetsprojekt som encyklopedin Wikipedia.
Licenser som GNU GPL som är gjorda för program passar inte alltid så bra in på annat material. Organisationen Creative Commons har gjort en
mängd olika licenser som är till för att upphovsrättsinnehavare ska kunna ge en del av sina rättigheter till allmänheten utan att släppa all kontroll.
Dessa används rätt ofta vid spridande av texter,
musik, bilder osv. och en del av dessa licenser är
»fria« i den betydelse som används inom fri programvara. En del har även en copyleft-klausul, som
där kallas för Sharealike.
I figur 11.2 ses ikoner som ofta används vid beskrivning av de olika CC-licenserna.
Creative Commons.
BY = Attribution: man måste ange upphovsmakare.
NC = Noncommercial: bara icke-kommersiell spridning är tillåten.
ND = No Derivate Works: man får inte sprida härledda verk, utan bara exakta kopior
SA = share alike: man får bara sprida det med
samma villkor.
Här har share alike fått en symbol som liknar
den för det liknande copyleft.
En CC-licens använder någon kombination av
dessa element, t. ex. Attribution + NoDerivates =
11.6.6 Öppen källkod = Open source
by-nd =
för något som andra får sprida vidare
Termen öppen källkod (open source) kom till sei oförändrat skick, om de anger ursprung, oavsett
nare, och brukar användas av dem som snarare
om det görs kommersiellt eller inte. Det är inte
betonar de tekniska fördelarna som att ökad tillalla dessa licenser som räknas som fria enligt den
gänglighet av källkoden kan leda till förbättrade
betydelse som friprogramvarurörelsen använder.
program genom att fler har möjlighet att hitta fel
eller bidra med fixar. Då ses det som ett medel
till att nå bättre resultat snarare än som ett mål i
sig, även om vilka program som är fri programvara
och vilka som är öppen källkod i praktiken oftast
räknas likadant.
104
Inlupp 11: Program
Redovisning
Uppgift 11.1 Efter att du har checkat in den,
så ta bort filen sagobok.tex och ge svn status
Checka in svar på frågorna i en fil ids11.txt i
igen. Att en fil som borde finnas saknas i din arden versionskontrollerade katalog som heter som
betskatalog vill Subversion verkligen uppmärkditt användarnamn och som du har sedan tidigare.
samma dig på. Vad använder den för tecken för
Gör en incheckning redan första dan du hållit på
att markera sådana filer?
med detta, och en ny efter nästa gång du arbetat
med det, osv.
Eftersom filen var versionskontrollerad kan du
hämta tillbaka den från repositoriet igen. Gör
svn update så får du den senaste versionen.
Versionskontroll igen
Gå i skalet till katalogen alla som du skapat tidi- Uppgift 11.2 Vad svarade svn då?
gare som kontrolleras av Subversion.
Kolla läget här med kommandot svn status
* * *
som säger något om hur din arbetskatalog skiljer sig från vad som finns i repositoriet. Du borde På http://stp.lingfil.uu.se/lila/vc/svn/
står om hur man kan starta egna projekt under
bland annat få rader som
Subversion här.
Vissa av De lila sidorna kan bara läsas om man
?
sagobok.aux
är inloggad på dem, för att inte säga onödigt myc?
sagobok.pdf
ket om hur våra datorer är uppsatta till allmänheoch några till eftersom LaTeX skapade de filerna ten. Detta är en sådan sida. Skapa en sådan webbnär du TeXade sagobok.tex, men Subversion in- inloggning för att kunna läsa den. (Detta är ett
te vet något om dessa filer. Det är helt i sin ord- exempel på ett lösenord som inte är så himla vikning. Dessa filer bör inte checkas in, eftersom de tigt. Återanvänd inget viktigt lösenord här, t. ex.
skapas automatiskt från andra.
inte ditt vanliga inloggningslösen!)
Ett M står för modified, så om du har en rad som
Uppgift 11.3 Vad står det för exempel på en
M
sagobok.tex
svn import-rad för att starta ett projekt där?
betyder det att du har gjort ändringar i den filen
som du inte har checkat in. (Gör det i så fall om
det är riktiga ändringar!)
Ett A står för added, så om du haft en rad som
Att köra program
Gå till svn-katalogen som heter som ditt användarnamn. I föräldrakatalogen, alltså din kurskataA
groda.png
log ligger ett program som du körde från den grafiska miljön i uppgift 1.4 (s. 11).
skulle det betytt att du har registrerat den filen i
Om du istället ska köra samma program från
Subversion, men sen inte checkat in den ännu.
skalet kan du använda en relativ sökväg för förÖppna sagobok.tex och använd samma kom- äldrakatalogen (ett snäpp upp). Prova!
mando som i uppgift 10.25 för att se till att
den är uppdaterad. Ändra sedan i den genom att Uppgift 11.4 Hur skrev du då?
byta ut Det var en gång i början av din saga
mot \lettrine{D}{et var en gång}. TEXa fiGå upp till föräldrakatalogen så att du står i
len, och om allt gick bra så checka in din ändring. samma katalog som programmet. För att köra
Där används ett LaTeX-kommando för stor initial programmet härifrån är det enklaste att använda
med två argument.
en relativ sökväg som betyder »samma katalog«.
Prova!
105
INLUPP 11: PROGRAM
Uppgift 11.5 Hur skrev du då?
NR-grep
Du har fått nys om ett program NR-grep som är
ett grep-liknande program, men som bland annat
Att kompilera
skiljer sig genom en väljare -k med vilken man
kan hitta ungefärliga träffar, som kan skilja sig lite
Gör svn update i svn-katalogen som heter som från det man letar efter.
ditt användarnamn. Det visar sig att en ny fil dyI exemplet nedan söker jag efter felstavningen
ker upp – trappa.c.
»aprksimativ« i en ordlista. Först tillåter jag två
Det är ett litet program i programspråket C.
skillnader, men hittar ändå inget. När jag tillåter
Kompilera programmet med cc trappa.c. tre skillnader hittar jag ordet. Om jag tillåter hela
(cc är C-kompilatorn.) Det skapas då en ny fil fyra skillnader finns det flera möjligheter.
med det körbara programmet.
Uppgift 11.6 Vad heter den fil som då skapas?
Uppgift 11.7 Vad säger kommandot file att
den filen är för något slags fil?
Den skapade filen är ett körbart program. Kör
den med /local/texts/jabberwocky som input. (Programmet accepterar inga argument, så
du får lov att använda omdirigering.)
$ nrgrep -x -k2 'aprksimativ' dsso-list.txt
$ nrgrep -x -k3 'aprksimativ' dsso-list.txt
approximativ
$ nrgrep -x -k4 'aprksimativ' dsso-list.txt
approximativ
approximativa
approximativt
predikativ
presumtiv
primitiv
Uppgift 11.8 Hur skrev du kommandot för att
göra detta och hur löd resultatet?
Normalt skulle man vilja att detta program
vars källkod ligger i trappa.c skulle heta trappa
istället. Det finns väljare till cc för att göra så istället, men tillverka istället en sådan fil
trappa med hjälp av kommandot make. Kör alltså make trappa. Det skriver ut vilket kommando
det i sin tur utför.
Sök upp detta program på nätet och hämta
källkoden (till den senaste versionen). Flytta den
till din kurskatalog och packa upp den där.
Uppgift 11.12 Vad heter filen du hämtade?
Uppgift 11.13 Vad gav du för kommando för
att packa upp den?
I katalogen du får då hittar du information om
Uppgift 11.9 Vilken väljare till cc använde
make för att tala om vad det kompilerade pro- hur programmet kan installeras. Gå till den nyskapade underkatalogen och gör så. (Det kommer
grammet skulle heta?
upp en drös varningar när programmet kompileUppgift 11.10 Om du gör make trappa igen ras, men det är inget du behöver bry dig om. Ifall
vad får du för meddelande från make?
du vore programmets författare borde du bry dig
om dem.)
Såg du vad programmet gjorde med textfilen?
Här finns inget sista installationssteg som lägAntagligen kan du inte C, men öppna ändå källger in programmet i nån särskild katalog, utan det
koden med Emacs och se om du kan gissa en del
ligger bara kvar i denna katalog.
av hur programmet fungerar. Indent betyder indrag.
Uppgift 11.14 Ge ett kommando som plockar
ut alla rader i /usr/share/dict/words som ligUppgift 11.11 Vissa delar av programmet är
ger högst två steg ifrån »starback«, samt det resulkommentarer – de har ingen effekt på vad protat du får av detta.
grammet gör, utan finns där för att underlätta läsningen och förståelsen av programmet. Vad skriver man tydligen före respektive efter kommen- Uppgift 11.15 I FSF och friprogramvaruvärlden
talar man om fyra friheter som ska vara uppfyllda
tarer i C?
för att program ska räknas som fri programvara.
Ändra i trappa.c så att den gör indrag med Vilka är dessa fyra? (Sök på nätet.)
mellanrum istället för med understreck. Skriv
make trappa för att kompilera om programmet
När man kör nrgrep -H säger den att det är
och provkör det för att se att det stämmer, och free software och att man ska se »the GNU Genchecka sedan in den ändring du har gjort, med ett eral Public License for details«, men här finns
loggmeddelande som talar om vad du har ändrat. motstridig information, för det följer med en fil
106
Bugg i grep
med programmet som innehåller upphovsrättsinHämta den senast publicerade på nätet och
formation som inte är GNU GPL utan en egen kompilera och installera den för att se om den
text.
har samma fel. Använd hela det normala GNUsättet för att installera program, och använd
--prefix ~ vid konfigureringen för att få din
Uppgift 11.16 Vad heter den filen?
hemkatalog som prefix.
Uppgift 11.17 Enligt vad som står om rättigheterna där finns det minst en av de fyra friheterna
Uppgift 11.21 Exakt vilka kommandon skrev
i uppgift 11.15 som man inte har som användare
du då?
av detta program. Nämn en sådan, och förklara på
Uppgift 11.22 I vilken katalog hamnade nu det
vilket sätt den inte är uppfylld!
nyinstallerade programmet grep? Hur kan du
enklast skriva för att köra det?
Bugg i grep
Uppgift 11.23 Finns buggen kvar? Vad använde
du för kommando för att testa det?
Förra veckan upptäckte en anonym student, vi
kan kalla honom Christian3 , en bugg i grep där
När du kompilerade programmet så skapades
\w ibland inte matchade vissa bokstäver.
en massa filer som inte längre behövs. En del var
bara mellanresultat, och de som var det resultat
som du var ute efter har kopierats till en annan
$ grep -E '^\w{4}t\w{2}g$' dsso-list.txt
katalog när du installerade. Läs i INSTALL för att
se vad du kan ge för make-kommando för att rensa
bort de filer där som inte längre behövs och ge det
Detta hittar bara 45 svar. Där saknas t. ex. flykt- kommandot.
väg som borde ha varit med, då det ju består av
fyra ordtecken (flyk) följt av t följt av två ordtec- Uppgift 11.24
ken (vä) följt av g.
Det skulle kunna vara bra att rapportera buggen till programutvecklarna.
Hur löd det kommandot?
*
*
*
DSSO
I tidigare uppgifter har ni använt Den stora svenska ordlistan.
Denna fria svenska ordlista fanns under flera år
inte tillgänglig i sin källform på nätet. När jag skriver detta ser jag att den dök upp igen i somras
på http://dsso.se/ i ett nytt format, men uppDu ska förstås inte använda dig av någon fil gifterna nedan bygger på hur den såg ut tidigare,
dsso-list.txt, för den har inte den som ska ta så istället för att hämta den på nätet själva får ni
emot rapporten. Och inte ett långt sammansatt använda den senaste versionen jag hämtade där
regexp, utan något kortare som ändå visar upp för ett par år sen, /local/kurs/ids/dsso-1.52.
buggen. Ett mål är att den som tar emot rappor- txt.
Den filen innehåller ordlistans information på
ten lätt ska kunna prova själv och se buggen.
ett
särskilt textformat. Du får se efter själva hur
(Om det vore på riktigt skulle du skriva på enginnehållet
i filen är upplagt. Från detta format
elska, men du kan skriva på svenska istället nu.)
skapades flera filer i andra format, till exempel
rättstavningsfiler till ordbehandlare.
* * *
I figur 11.3 finns ett par utdrag ur filen. En sak
Fast när man ska rapportera buggar är det ännu
att märka är att det bara är rader med < och > som
bättre om man först ser efter om de redan är fixainnehåller ordformer.
de genom att jämföra med den senaste versionen.
Lägg filen i svn-arbetskatalogen och skapa en fil
dsso.sh i samma katalog. Checka in den, fast den
Uppgift 11.19 Vilken version av grep kör vi
är tom, så att jag ser att du har kommit igång med
här? Hur tog du reda på det?
denna uppgift.
Här ska du skriva ett skalskript så att om
Uppgift 11.20 Vilken är den senaste publicerade versionen av GNU grep? Var på webben hittade du ger kommandot bash dsso.sh skapas en
du det? (Den är från i år, så är inte den du hittade fil ordformer.txt som innehåller en UTF8-fil
med en ordform per rad. Hoppa över flerordsutfrån i år har du hittat fel.)
tryck från filen som »au pair« och »science fic3 ulfen
tion«. Resultatet ska vara sorterat (på svenska)
Uppgift 11.18 Formulera en buggrapport om
den buggen. Ge ett kort kommando utan onödiga detaljer som ger ett oönskat resultat. Tala om
både vad det ger för resultat och vad du väntade
dig för resultat istället.
107
INLUPP 11: PROGRAM
# Copyright (c) 2011 Göran Andersson
# This work is licensed under the Creative Commons Attribution-Share Alike License.
...
890212r5<verb>näta:näta:nätade:nätat:nätar:näta:nätas:nätades:nätats:nätas:nätad:nätat:nätats:nätande:
DEFINITION 1: Göra mål, dvs bollen hamnar i målets nät.
...
571187r5<adjektiv>rätt:rätt:rätt:rätta, rättan:rätta:rättare:::rätte::::::::
Figur 11.3: Utdrag ur dsso-1.52.txt.
och utan dubbletter. Det är alltså i stil med den
dsso-list.txt som ni har använt förut, förutom
att den är gjord från en ännu tidigare version av
DSSO.
Använd flera skalkommandon i rad och lagra
mellanresultat i filer som du tar bort i slutet av
skalskriptet. Det första skulle t. ex. kunna vara
ett kommando som skapar en fil dsso-u8.txt
som är likadan som originalet, men omvandlad till
UTF8. Senare i skalskriptet skulle du i så fall göra
rm dsso-u8.txt för att rensa upp efter dig.
* * *
Tips: Fokusera inte på att det ska bli ett skalskript
till att börja med, utan försök bara hitta kommandon för att lösa uppgiften. Sen kan du stoppa in
dina kommandon i skriptet och köra alltihop samlat.
I skalskript kan man skriva kommentarrader
som börjar med »#«. Använd det för att förklara
vad som händer, t. ex. med en kommentarsrad
# Omvandla till UTF8
före första kommandot.
Rapport
Efter att du är klar med detta så använd kommandot
Lista även hela skalskriptet i rapporten. Använd det sätt som nämns på Lila sidorna under
TEX, Kodlistingar.
Avsluta med ett avsnitt där du berättar något
om det resultat du fick. Berätta hur många ordformer du hittade, och tala om några tillägg och
borttagningar jämfört med dsso-list.txt.
Skaluppgifter
Dessa uppgifter ska lösas med ett eller flera kommandon i skalet. Ange både vilket eller vilka kommandon du gav, samt vad resultatet blev.
Uppgift 11.25 Vilka delstater i USA har namn
som består av mer än ett ord? Använd filen
/local/kurs/ids/us-states.txt. Låt resultatet bli sorterat och med bara namnen (utan datum).
Uppgift 11.26 Vad finns det för rader i /local/
kurs/ids/wonderland.txt som bara innehåller
ett ord, eventuellt med ett eller flera mellanslag
före eller efter, men inga andra tecken.
Uppgift 11.27 Vad finns det för ord som börjar på stor bokstav i den ryskspråkiga textfilen
/local/kurs/ids/rysk.txt. Glöm inte att den
filen är kodad med ISO 8859-5! Svaret ska vara
i vårt vanliga UTF-8 och innehålla en lista över
bara de orden, ett per rad, utan dubbletter.
diff -u /local/dict/dsso-list.txt ordformer.txt
för att se vilka skillnader det har blivit jämfört
med den gamla listan.
Skriv en kort rapport dsso.tex i LaTeX om din
lösning av DSSO-uppgiften. Checka in den filen
på samma ställe som det övriga. (Du ska inte lämna in den PDF du gör särskilt, utan den genererar jag själv när jag ska titta på den.) Använd dokumentklassen stupp, och \course för att ange
kursnamn. Sätt lämplig titel. (Du kan ha en undertitel med \subtitle också.)
Beskriv i några avsnitt uppgiften, din lösning
och hur resultatet blev.
108
Att rensa upp efter sig
Snart har du förhoppningsvis blivit godkänd på
denna kurs, och då kan det vara läge att rensa
upp i din kurskatalog. Du borde inte ha skapat
så mycket stora filer i denna kurs, men i en annan
kurs kan det bli rejält med data som du antagligen inte behöver ha kvar efteråt, så det är en
bra vana att efteråt se över vad som kan komprimeras eller kanske till och med tas bort. Se
http://stp.lingfil.uu.se/lila/disk/ för en
del tips som har med diskanvändning att göra.
Leta filer
Uppgift 11.28 Vad kan du enligt detta ge för
skalkommando för att se hur mycket plats din
hemkatalog tar upp? Hur mycket var det? Ett par
väljare används till kommandot. Vad betyder de?
Uppgift 11.29 Använd samma skalkommando
(med andra väljare/argument) för att lista storleken på alla filer och kataloger i din hemkatalog
och sortera dessa rader i storleksordning.
Uppgift 11.32 Lista filer hos användaren ellen
som har namn som slutar på .jpg.
Ellen har flera kataloger som du inte får leta
i, så därför får du en mängd varningar. Häng på
2>/dev/null på slutet för att slippa se varningarna.
Varningar och felmeddelanden skrivs ut »för
sig« och kan omdirigeras med 2> istället för >. Allt
som skrivs till den speciella »filen« /dev/null i
Unix
försvinner i ett svart hål och kommer aldrig
Med ls -l eller wc -c får man filers storlek,
tillbaks.
men det duger inte till denna uppgift eftersom
det inte säger nåt om katalogers storlek.
Uppgift 11.33 Det finns en särskild sökmöjlighet i find för sånt som är tomt också. Vad finns
Uppgift 11.30 Se även vad det står på de lila si- det för tomma filer som heter README under
dorna om att man kan lagra filer på andra ställen. /usr/share?
Du kanske har noterat att det finns ett nobackup i
din hemkatalog. Vad sägs om detta nobackup här?
Med »under« menar jag i den katalogen, eller
i
en
underkatalog till den katalogen, eller i en
Uppgift 11.31 Se även tipsen där om hur man
underkatalog
till en underkatalog till den katalohittar stora filer som man inte använt på länge.
gen,
eller i en underkatalog till en underkatalog till en
Använd kommandot som nämns där för att lista
vilka filer under din kurskatalog som är minst någon viss storlek. Välj en gräns så att det blir flera
men inte jättemånga filer som nämns. (Visa som
vanligt kommando och resultat.)
underkatalog till den katalogen, eller i en underkatalog
till en underkatalog till en underkatalog till en underkatalog
till den katalogen, eller i en underkatalog till en underkatalog till
en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en
underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en
I exemplet på sidan används »M« för Megabyte.
Se dokumentationen för det kommandot om du
vill använda något mindre eller större prefix.
underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till
en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en
underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till den
katalogen,
eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till
en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en
Leta filer
Läs i dokumentationen om kommandot find för
att ta reda på hur man kan sätta krav på filnamnet
för de filer som den ska hitta.
underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen,
eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till
en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen,
eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en
underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en
underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en
underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen,
eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller . . . (fnord)
109
Figurer
1.1 Gnuhuvudet är ritat av Aurelio A. Heckert och är taget från http://www.gnu.org/
graphics/heckert_gnu.html. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 De två döda tangenterna på våra tangentbord. Fotografi. . . . . . . . . . . . . . . . . . .
1.3 Ett filträd, ritat med hjälp av LaTeX-paketet forest. . . . . . . . . . . . . . . . . . . . .
1.4 Filhanteraren om konto.txt. Skärmdump. . . . . . . . . . . . . . . . . . . . . . . . . . .
1.5 Mer om konto.txt. Skärmdump. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.6 Teleprintern ASR33. Bilden är fotograferad av Marcin Wichary som sprider den med Creative Commons Attribution License på flickr.com. Jag har hämtat den från uppslagsordet
»ASR-33 Teletype« på Wikipedia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
4
6
8
8
9
2.1 En Emacs med två stora fönster som visar varsin buffert samt en aktiv minibuffert. Skärmdump. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.1 Hur många ord finns det på de första tio raderna? Kommandoröret head stp.txt | wc -w
3.2 Vad heter Tjatte på danska? Kommandoröret cut -f 3 knattarna.txt | tail -n 1 .
3.3 Vad heter Tjatte på danska med en annan metod. Kommandoröret tail -n 1
knattarna.txt | cut -f 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4 Vilka »Fnattar« har ett namn med a i? Kommandoröret cut -f 2 knattarna.txt | grep
a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.5 Hjälptexten för head. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1 Exempel på fel. En text är skriven med vissa koder, men tolkas utifrån andra koder. I detta
fall är det Latin-1 som tolkats som CP850. . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2 ASCII-tabell. Gjort som en LaTeX-tabular. . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3 Tecken 160–255 i Latin-1. Gjort som en LaTeX-tabular. . . . . . . . . . . . . . . . . . .
4.4 Den korta texten »Hallå! ,« lagras med UTF-8. Olika tecken tar olika mycket plats att lagra.
4.5 Exempel på teckenkodningsfel där en text skriven med UTF-8 tolkas som om det vore
Latin-1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.6 Figur 4.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.7 Startcitat och slutcitat i olika typsnitt (Helvetica och Palatino). . . . . . . . . . . . . . . .
4.8 Några exempel på hur olika kommandon ger olika texter ifrån sig beroende på vilken locale
som gäller. (I det sista exemplet märks skillnaden bara på »yhteensä« istället för »total«.) .
26
29
29
29
29
36
37
37
38
38
39
39
42
4.9 Zoomkommandon i Emacs. Den sista är med siffran 0, inte bokstaven O. . . . . . . . . .
4.10 Ett par vikare, tagna från Wikipedia, som i sin tur har tagit bilden från The Fisheries and
Fisheries Industries of the United States av George Brown Goode (1887). . . . . . . . . . .
45
5.1 Man-sidan för wc i Unix v7 (1979) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
50
5.2 Från xkcd av Randall Munroe. http://xkcd.com/912/
. . . . . . . . . . . . . . .
54
6.1 Exempel på missöde när flera personer kan ändra i samma filer. Taget från boken Version
Control with Subversion, publicerad av O’Reilly Media, skriven av Ben Collins-Sussman,
Brian W. Fitzpatrick och C. Michael Pilato, spridd enligt Creative Commons Attribution
License v2.0, tillgänglig på http://svnbook.red-bean.com/. . . . . . . . . . . . . . . .
59
7.1 Logotyperna TEX och LATEX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2 Einsteins speciella relativitetsteori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
67
68
47
111
Figurer
Figurer
7.3 Donald E. Knuth som har skrivit TEX. Bilden är tagen från http://www-cs-faculty.
stanford.edu/~knuth/closeup.tif. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
71
7.4 En liten text som ni skulle efterhärma. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
76
9.1 Greppande med och utan -o i en saga . . . . . . . . . . . . . . . . . . . . . . . . . . . .
86
9.2 Utdrag ur ett korsord som författaren har löst. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
9.3 Från xkcd av Randall Munroe. http://xkcd.com/208/
89
91
11.1 Copyleft-tecknet. Detta tecken finns inte i typsnittet Berling antikva som kompendiet är
satt med så för att skriva det i denna figur använde jag \reflectbox{\copyright} för att
spegelvända ett ©. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
11.2 Byggblock i Creative Commons-licenser. . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
11.3 Utdrag ur dsso-1.52.txt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
112
Tabeller
2.1 Beteckningar på några tangenter i Emacs. . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 En del Emacs-kommandon för förflyttning . . . . . . . . . . . . . . . . . . . . . . . . . .
19
20
3.1 Språkkoder enligt standarden ISO 639-1 för några språk med många talare i världen, Europa, Norden eller Sverige . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
4.1 Koder enligt ISO 3166-1 för några av världens och Europas största länder, samt de skandinaviska länderna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
6.1 Några C-h-kommandon i Emacs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
7.1 Kommandon för att välja typsnitt i LaTeX . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2 Några accentkommandon i LaTeX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
69
72
9.1 Några namngivna teckenklasser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
113
Innehåll
1 Inledning
1.1 Om kursen . . . . .
1.2 Vårt datorsystem . .
1.3 Filer och kataloger .
1.4 Grafisk filhantering
1.5 Klipp och klistra . .
1.6 Textfiler . . . . . .
1.7 Editorer . . . . . . .
1.8 Filskydd . . . . . .
1.9 Kommandoraden . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
3
3
5
6
7
7
7
7
8
Inlupp 1: Inledning
11
2 Skalet och Emacs
2.1 Skalet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
15
18
Inlupp 2: Skalet och Emacs
21
3 Mer om skalet
3.1 Långa väljare . . . . . . . . . . . . .
3.2 Kommandorör (|) . . . . . . . . . .
3.3 En användning av echo . . . . . . .
3.4 Omdirigering av standard input (<) .
3.5 Långa rör och filter . . . . . . . . .
3.6 Relativa sökvägar . . . . . . . . . . .
3.7 TAB . . . . . . . . . . . . . . . . . .
3.8 Skalkommandot cut . . . . . . . . .
3.9 Att tolka hjälp om skalkommandon
3.10 Argumentet - . . . . . . . . . . . .
3.11 Skalskript . . . . . . . . . . . . . . .
3.12 Expansion i skalet . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Inlupp 3: Mer om skalet
4 Teckenrepresentation
4.1 Binärt . . . . . . . . . . . . . . . . . . .
4.2 Teckenkoder . . . . . . . . . . . . . . .
4.3 Att ange teckenkodning . . . . . . . . .
4.4 ASCII . . . . . . . . . . . . . . . . . . .
4.5 Kontrolltecken och nyrad . . . . . . . .
4.6 Latin-1 . . . . . . . . . . . . . . . . . .
4.7 ISO 10646 = UCS ≈ Unicode . . . . . .
4.8 Övriga teckenkodningar . . . . . . . . .
4.9 Vad är olika tecken? . . . . . . . . . . .
4.10 Språkinställningar . . . . . . . . . . . .
4.11 Olika teckenkodningar i Emacs . . . . .
4.12 Att konvertera mellan teckenkodningar
4.13 Att skriva tecken i Emacs . . . . . . . .
114
25
25
25
26
26
27
27
27
27
28
28
30
30
31
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
35
35
35
35
36
36
37
37
38
39
40
41
42
42
Innehåll
Innehåll
4.14 Hos oss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Inlupp 4: Teckenkodningar
43
44
5 Dokumentation och textbearbetning i skalet
5.1 Dokumentation . . . . . . . . . . . .
5.2 Skalkommandon för texthantering . .
5.3 cut . . . . . . . . . . . . . . . . . . .
5.4 echo . . . . . . . . . . . . . . . . . .
5.5 grep . . . . . . . . . . . . . . . . . .
5.6 more . . . . . . . . . . . . . . . . . .
5.7 paste . . . . . . . . . . . . . . . . . .
5.8 sort . . . . . . . . . . . . . . . . . .
5.9 tr . . . . . . . . . . . . . . . . . . . .
5.10 uniq . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
49
49
50
50
50
51
51
52
52
52
52
Inlupp 5: Textbearbetning i skalet
54
6 Versionskontroll och Emacs
6.1 Versionskontroll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2 Emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
59
60
Inlupp 6: Versionskontroll och Emacs
62
7 LaTeX
7.1 Stycken och rader . . . . . . .
7.2 Allmän struktur . . . . . . . .
7.3 Kommandon med \ (bakstreck)
7.4 Klamrar för grupper . . . . . .
7.5 Speciella tecken . . . . . . . .
7.6 Titel och rubriker . . . . . . .
7.7 Omgivningar med begin–end .
7.8 Typsnitt . . . . . . . . . . . . .
7.9 Hårt mellanslag (~) . . . . . .
7.10 Bindestreck och tankstreck . .
7.11 Citattecken . . . . . . . . . . .
7.12 Dokumenthuvudet . . . . . .
7.13 Figurer . . . . . . . . . . . . .
7.14 Kommentarer med % . . . . .
7.15 Att referera inom texten . . .
7.16 Övriga tecken . . . . . . . . .
7.17 verbatim och \verb . . . . . .
7.18 LaTeX i Emacs – AUCTeX . .
7.19 UTF-8 och LaTeX . . . . . . .
7.20 Mer information . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Inlupp 7: LaTeX
8 Internet & World Wide Web
8.1 ssh . . . . . . . . . . .
8.2 Domännamn . . . . . .
8.3 Toppdomäner . . . . .
8.4 World Wide Web . . .
8.5 Redovisning . . . . . .
8.6 Att publicera på WWW
8.7 HTML . . . . . . . . . .
8.8 CSS . . . . . . . . . . .
8.9 ids8.html . . . . . . .
67
67
67
68
68
69
69
69
69
69
69
70
70
71
71
72
72
72
73
73
73
74
.
.
.
.
.
.
.
.
.
79
79
79
79
79
80
80
80
81
82
9 Reguljära uttryck
9.1 Ett tecken: . [ ] [^ ] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
83
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
115
Innehåll
9.2
9.3
9.4
9.5
9.6
9.7
9.8
9.9
9.10
9.11
9.12
Innehåll
Ankring: ^ $ \< \> . . . . . .
Bakstreck: \ . . . . . . . . . .
Utökade reguljära uttryck . . .
Repetitioner: * + ? {} . . . .
Alternativ: | . . . . . . . . . .
Exempel . . . . . . . . . . . .
Olika sorters reguljära uttryck
Reguljära uttryck i Emacs . . .
grep -o . . . . . . . . . . . .
Girighet och hunger . . . . . .
sed . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Inlupp 9: Reguljära uttryck
10 Dokumentrepresentation
10.1 Uppmärkt text . . . . . . .
10.2 HTML kommer från SGML
10.3 SGML och XML . . . . . .
10.4 MIME . . . . . . . . . . . .
10.5 Komprimering av filer . . .
10.6 Filarkiv . . . . . . . . . . .
83
83
84
84
84
84
85
85
85
85
86
88
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Inlupp 10: Dokumentrepresentation
11 Program
11.1 Skript . . . . . . . . . . . . . . . . . . . . . . . .
11.2 Interpreterande och kompilerande programspråk
11.3 Att köra program . . . . . . . . . . . . . . . . .
11.4 Att kompilera program . . . . . . . . . . . . . .
11.5 Att installera program . . . . . . . . . . . . . . .
11.6 Upphovsrätt och licenser . . . . . . . . . . . . .
93
93
93
94
95
96
96
98
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
101
101
101
101
101
102
102
Inlupp 11: Program
105
Figurer
111
Tabeller
113
Innehåll
114
Register
117
116
Register
’, se apostrof
. (i reguljära uttryck), 51, 83
. (i sökvägar), 27
.. (i sökvägar), 15, 27
<, se omdirigering
>, se omdirigering
$1 (i skalskript), 58
\, se bakstreck
|, se lodstreck
-, se bindestreck, se även em-dash, en-dash
#, se nummertecken
˜, se tilde
aktuell katalog, 15, 27
Alt-tangent, 18
AltGr, 4
ankring (av reguljära uttryck), 51, 83
ANSI (American National Standards Institute), 39
användarnamn, 4
apostrof (’), 40
arbetskatalog, se aktuell katalog
argument, 10, 15
ASCII (American Standard Code for Information Interchange), 36
backup, 20
bakstreck (\), 6, 36
för att skriva kontrolltecken, 52
i LaTeX, 68
i reguljära uttryck, 83
bash (kommando), 30, 101
Bell Labs, 15, 102
Berkeley Software Distribution (BSD), 102
Berners-Lee, Tim, 79
binära tal, 35
binärfiler, 5, 93
bindestreck (-)
dubbla, 25
inleder väljare, 16
som argument, 28
bit, 35
Bourne, Steve, 15
broken bar (¦), 26
BSD, se Berkeley Software Distribution
buffert (i Emacs), 19
byte, 5, 11, 35, 93
bzip2 (kommando), 96
C (locale), 41
C (programspråk), 5, 106
cal (kommando), 55
carriage return, se returtangenten
cat (kommando), 9, 17
cc (kommando), 106
cd (kommando), 9, 15
citattecken, 39, 70
compress (kommando), 96
Control-tangent, 7
copyleft, 103, 104
copyright, se upphovsrätt
cp (kommando), 9, 17, 28
CRLF, 36, 46
cut (kommando), 27, 28, 50
väljare -f, 27
CVS, 59
date (kommando), 16
väljare -d, 16
väljare -u, 16
default, 42, 74
Desktop (katalog), 7
/dev/null, 109
diff (kommando), 90, 108
directory, se katalog
dold fil, se fil
domännamn, 4, 79
drag and drop, 11
död tangent, 4
echo (kommando), 22, 26, 30, 50
väljare -e, 50
ed (kommando), 86, 87
editor, 7, 86
ekoarea (i Emacs), 19
element, 93
em-dash (—), 70
Emacs, 7, 18–20, 41–43, 60–61, 85
referenskort, 63–64
en-dash (–), 70
entertangenten, 9, se även returtangenten
Escape, 36, 46
eurotecken (C), 39
evince (kommando), 74, 75
exit (kommando), 79
expansion (i skalet), 30
fg (kommando), 79
fil, 5
117
Register
dold, 5, 17, 27
file (kommando), 95
filnamn, 5
filnamnsändelse, 5
filskydd, 7–8
filter, 27, 86
filträd, 5–6
find (kommando), 109
flagga, 16, se även väljare
float (i LaTeX), 71
fmt (kommando), 13, 18
väljare -w, 18
folder, se katalog
Free Software Foundation, 103
fullständig sökväg, se sökväg, fullständig
fönster (i Emacs), 19
girighet (om reguljära uttryck), 85
glyf, 39
Gnome, 3
GNU, 3, 15, 18, 44, 49, 96, 102–103
GNU Emacs, se Emacs
GNU GPL (General Public License), 104
GNU/Linux, 3, 103
grep (kommando), 13, 16, 18, 25, 51, 83–85,
87
väljare -c, 16
väljare -E, 84
väljare -i, 16
väljare -o, 85
väljare -v, 51
väljare --color, 51
grupp, 8
gunzip (kommando), 96
gzip (kommando), 96, 97
head (kommando), 18, 28, 29
väljare -n, 18
--help (väljare), 28
hemkatalog, 4–6, 15
hexadecimala tal, 35, 94
HTML , 5, 80, 82, 88, 93–95
hunger (om reguljära uttryck), 85
hypertext, 79
hårt mellanslag
i TEX, 69
IANA (Internet Assigned Numbers Authority), 35, 36, 39, 95
iconv (kommando), 42, 45
Info, 49, 54–55
informationsrad (i Emacs), 19, 22, 33, 41, 45,
46
inloggning, 4
inputmetod (i Emacs), 42
Internet, 79–80
interpretator, 101
ISO (Internationella standardiseringsorganisationen), 37, 40
ISO 639-1, 32
118
Register
ISO 3166-1, 40
ISO 8859-*, 39
ISO 8859-1 (= Latin-1), 37
ISO 10646, se UCS
Java (programspråk), 85
joker, 15, 30
Kaka, Ellen, 6, 8
katalog, 5, se även hemkatalog, underkatalog
aktuell katalog, 15
kilo, 35
klipp-och-klistra, 7, 12
Knuth, Donald E., 71
kommandorad, 8
kommandorör, 25–27, 41
kompilator, 5, 101
komplettering, 13
i Emacs, 22
komprimering, 96
kontrolltecken, 36, 93, 100
källkod, 5, 101
LANG (miljövariabel), 41
LaTeX, 67–73
Latin-1 (= ISO 8859-1), 37
LibreOffice.org, 7
licens, 102, 104
line feed, 36
Linux, 103, se även GNU/Linux
locale, 40, 41, 43
locale (kommando), 41
lodstreck (|), 26
för alternativ i kommandosynops, 49
i kommandorör, 25
i reguljärt uttryck, 84
ls (kommando), 9, 10, 16, 17
väljare -a, 17, 21
väljare -l, 16, 17
länder
koder för, 40
lösenord, 4
make (kommando), 101, 102, 106, 107
man (kommando), 49
man-sida, 49–50
mapp, se katalog
Massachusetts Institute of Technology (MIT),
18, 103
Mega, 35
mellanslag, 18, se även hårt mellanslag
i filnamn, 5, 15
Meta-tangent, 18
metatecken (i reguljära uttryck), 51, 83, 84
Microsoft, 103
Microsoft Windows, 36, 37, 39
MIME , 95, 99
minibuffert (i Emacs), 19
mkdir (kommando), 9, 17
modeline (i Emacs), se informationsrad
Register
more (kommando), 51
MS-DOS, 103
mv (kommando), 9, 17, 21
märkspråk, 95
\n (nyrad), 36, 50, 52
newline, 36, 50, 52
nod (i Info), 54, 55
nummertecken (#)
i namn på Emacs autosparfiler, 20
nyrad, 36, 52
Ogg Vorbis, 100
oggenc (kommando), 100
oktala tal, 35
omdirigering, 17, 25–27
med 2>, 109
med <, 26
med >, 17
med |, 25
omgivning (i LaTeX), 69
Open Group, The, 103
open source, se öppen källkod
operand, 15, se även argument
option, se väljare
ordbehandling, 7, 67
paste (kommando), 52
PDF (Portable Document Format), 67
Perl (programspråk), 85, 91
pipe, 25, se även kommandorör
plain text, 7, 35, 93
play (kommando), 100
POSIX, 103
prefixtangent (i Emacs), 18
program, 101–102
programspråk, se C, Java, Perl, Python, 101
prompt, 9
punkten (i Emacs), 20
pwd (kommando), 9, 15
Python (programspråk), 85, 101
ramar (i Emacs), 19
redirection, se omdirigering
regex(p), se reguljärt uttryck
region (i Emacs), 20, 61
regular expression, se reguljärt uttryck
reguljärt uttryck, 51, 83–87
enkelt, 84
i Emacs, 85
utökat, 84
relativ sökväg, se sökväg, relativ
repositorium, 59
RET, return, se returtangenten
returtangenten, 9, 19
rm (kommando), 9, 17, 25
rmdir (kommando), 9, 17
sed (kommando), 86, 87
väljare -r, 87
seq (kommando), 14
Register
(Standard Generalized Markup Language), 93
shell, se skal
shell script, se skalskript
Single Unix Specification, 103
skal, 9
skalskript (shell script), 30, 57
sort (kommando), 32, 40, 41, 52
väljare -n, 52
sortering, 41
språk
koder för, 32
språkinställning, 40
ssh (kommando), 79
Stallman, Richard M., 18, 103
standard input, 25, 26
standard output, 17, 25
stdin, se standard input
stdout, se standard output
Subversion, 59, se även svn
svn (kommando), 60, 62, 74
sökväg
fullständig, 6, 27
relativ, 27
SGML
\t (TAB), 52
TAB-tangenten, 27
TAB-tecken, 27, 36, 50, 52
tagg, 93
tail (kommando), 18
väljare -n, 18
tangent
död, 4
tangentbord, 4
tar (kommando), 96, 97
tecken, 39
teckenklass, 83
teckenkodning, 7, 35
terminal, 9
TEX, 67
Texinfo, 49
textfil, 7, 36, 93
texthantering
i skalet, 17–18, 50–53
textredigerare, se editor
.tgz (filnamnsändelse), 97
Thompson, Ken, 86
tilde (˜)
hur man skriver tecknet, 5
i namn på backupfiler, 20
i sökvägar, 6, 30
i TEX, 69
i URL, 80
toppdomän, 79
Torvalds, Linus, 103
tr (kommando), 9, 52, 86
Turing, Alan, 16
UCS (Universal Character Set), 37, se även
Unicode
119
Register
underkatalog, 5
Unicode, 37, se även UCS
uniq (kommando), 46, 52, 53
väljare -c, 52
väljare -d, 52
väljare -u, 52
University of California, Berkeley, 102
Unix, 3, 36, 37, 96, 102–103
unzip (kommando), 96
upphovsrätt, 102
URL (Uniform Resource Locator), 80
US-ASCII, se ASCII
UTF-8, 38
utloggning, 4
vagnretur, se returtangenten
wc (kommando), 9, 18, 44, 49
väljare -l, 18
väljare -w, 18
versionskontroll, 59–60
vertical bar (|), se lodstreck
windows-1252, 39
WinLatin1, se windows-1252
working directory, se aktuell katalog
World Wide Web (WWW), 79–80
välformad (om XML), 95
väljare, 16
i LaTeX, 70
kombinera, 16
långa, 25
med argument, 16
X Window System, 103
XHTML , 94, 95
XML (Extensible Markup Language), 94–95
xz (kommando), 96
zcat (kommando), 96
zip (kommando), 96
,
öppen källkod, 104, se även fri programvara
120
Register