Reguljära uttryck och textbehandling

Relevanta dokument
Reguljära uttryck. Kapitel Reguljära uttryck Ett godtyckligt tecken: Ett speciellt tecken: [ ] 8.1.

Textbearbetning i skalet och man-sidor

Mer om skalet. Kapitel Omdirigering

Ännu mer om skalet. Kapitel Kommandorör. 4.2 Texthantering

Filers innehåll. Grundläggande databehandling. Representation av text. pffb = påhittat filformat för bilder

Datorer och datoranvändning Föreläsningar 2014/15. Föreläsning 1 Unix. Operativsystem. Unix

Lab 7, 48 steg till ett bättre liv i Unix-labbet

Program. Kapitel make Program Interpreterande och kompilerande program

Introduktion till datateknik för språkvetare

Föreläsning 1 Unix. Datorer och datoranvändning Föreläsningar 2018/19. Operativsystem. Unix

Introduktion till datateknik för språkvetare ht 2007

Introduktion till Linux. TDDE23 Funktionell och imperativ programmering, del 1 Föreläsning 1 Peter Dalenius Institutionen för datavetenskap

Kort-kort om utdelade användarkonton och datormiljön på NADA

kommando -fl argument

Teckenrepresentation. Kapitel Teckenkoder 5.3 ASCII. 5.2 Att ange teckenkodning

Introduktion till Unix och Linux

Tecken och teckenrepresentation

Introduktion till Linux. TDDC66 Datorsystem och programmering Föreläsning (i) Peter Dalenius Institutionen för datavetenskap

Kapitel 8. Reguljära uttryck. 8.1 Ett tecken:. [ ] [^ ] 8.2 Ankring: ^ $ \< \>

Introduktion till Linux. TDDC66 Datorsystem och programmering Föreläsning 1 Peter Dalenius Institutionen för datavetenskap

Kapitel 12. Mer om program Att rapportera buggar och problem make

Kort-kort om utdelade användarkonton och datormiljön på NADA

F2 Datarepresentation talbaser, dataformat och teckenkodning

Reguljära uttryck. Kapitel Reguljära uttryck. 8.2 Metatecken Ett tecken:. []

Datorintroduktion 2010 Föreläsning 1. Dieter Modig

Introduktion till datateknik för språkvetare

Datorsystem och programmering

Introduktion till datateknik för språkvetare

F2 Datarepresentation talbaser, dataformat och teckenkodning EDAA05 Datorer i system! Roger Henriksson!

Programkonstruktion med datorintroduktion, 2D1339

Datorintroduktion 2009 Föreläsning 1. Dieter Larsen (IT-chef Matematiska vetenskaper)

Introduktion till datateknik för språkvetare

UNIX. Laborations-PM Anders Egneus, Henrik Lindgren, 2004, Raphael Corsoski, Erik Eliasson, Christian von Schultz, 2008.

F3 Datarepresentation teckenkodning och datakompression EDAA05 Datorer i system! Roger Henriksson!

Kapitel 11. Program Att köra program Skript Interpreterande och kompilerande programspråk Att kompilera program

Lathund för UNIX och Emacs

F3 Datarepresentation teckenkodning och datakompression

Programmering i C++ Kompilering från kommandoraden

TDDD02 Föreläsning 2 HT Reguljära uttryck och reguljära språk Lars Ahrenberg

DD1310 Programmering för OPEN1 LAB1: Laborationer i Python läsåret 2011/2012

Unix design. Unix är ett operativsystem från mellan 1969 och 1972, beroende på hur man räknar. Unix utvecklas fortfarande.

awk, sed och grep awk döpt efter Aho Weinberger Kernighan (1977) sed en stream editor grep sed g/re/p bygger i viss mån på ed line editor

Kapitel 11. Program Skript Att köra program Interpreterande och kompilerande programspråk

729G09 Språkvetenskaplig databehandling

Konsolfönster i Windows Momentet ingår i kursen PDA DTR1206 Lab 1 DOS Konsolfönstret

Teckenrepresentation. Kapitel Teckenkoder. 4.2 Att ange teckenkodning 4.3 ASCII

Kapitel 3. Mer om skalet. 3.1 Kommandorör ( )

Kapitel 4. Teckenrepresentation. 4.2 Teckenkoder. 4.1 Binärt. 4.3 Att ange teckenkodning

Avslutning. Kapitel Komprimering av filer

Praktiska saker... Om Laboration 1. Studietips. Praktiska saker. Att studera hemifrån på PC. Seminarier & Lektioner & Handledning & Hemsida

Introduktion till datormiljön och Python

awk, sed och grep ed kommandon grep Standard unix editor tidig 70-tal program < 8Kbyte awk döpt efter Aho Weinberger Kernighan (1977)

Kapitel 11. Program Skript Att köra program Interpreterande och kompilerande programspråk Att kompilera program

Omkoppling av in- och utmatning. In- och utmatning i Unix. Kommando exempel, ls, pipe forts. Kommando exempel, ls, pipe

Kapitel 10. Dokumentrepresentation Uppmärkt text HTML kommer från SGML

Lab1 inginfo07. Detta dokument innehåller övningar för introduktion till Media-programmets datorsystem (Mac OS X).

Introduktion till användning av linux-servern sledge och några övningsuppgifter

Översikt. Texthantering med bl.a. kommandona cat, less och grep Omdirigering och piping Gnuplot. Linux 2 2 / 12

DD1310 Programmeringsteknik för Open1 och Med2 Laborationer läsåret 2014/2015

Unix. Dagens föreläsning. Unix. GUI/Textgränssnitt

Unix. Dagens föreläsning. Unix. GUI/Textgränssnitt. Syfte. Mål

komplex av nödvändiga, understödjande program som kallas Utanpå OS existerar ett - eller flera olika - slags skal som

Kapitel 4. Teckenrepresentation. Varf r blir det sõ hõr? s å [SPC] h ä r. s Õ [SPC] h õ r. 4.2 Att ange teckenkodning. 4.

Datorintro för elektro på Solaris

Lathund för Linuxkommandon

Programmering för språkteknologer II. OH-serie: Ändliga automater. reguljära uttryck i Java. Deterministiska ändliga automater

UNIX Introduktion UNIX. Datorerfarenhet. Vad menar man med operativsystem

STRÄNGAR DATATYPEN. Om du vill baka in variabler eller escape-tecken måste du använda dubbla citattecken. strängar

Övningar till UNIX/Linux Grundkurs och förslag till LÖSNING

Terminal vad det är vad man kan göra med den

UNIX. 2D1339 Programkonstruktion Hösten 2001 Datorintroduktion Laboration 1. Mål. Vad laborationen går ut på. Redovisning

Introduktion till datoranvändning. Välkomna till NADA. (Numerisk Analys och DAtalogi) och kursen. Datalogi, grundkurs 1, 15hp

BASH. Bourne-Again SHell. Eric Elfving Institutionen för datavetenskap (IDA)

Olika shell. Skalprogrammering. Pipor och omdirigering av strömmar

Välkomna till NADA. Datalogi, grundkurs 1, 15hp. (Numerisk Analys och DAtalogi) och kursen. DA2001 (Föreläsning 1) Datalogi 1 Hösten / 28

få ett hum om det grafiska användargränssnitten, CDE och/eller JDS.

Vad är en dator? Introduktion till datorer och nätverk. Pontus Haglund Institutionen för datavetenskap (IDA) 21 augusti 2018

Operativsystem Lektion 1. Lärare. Schema. Kurssajten Finns på adressen. Jan Erik Moström. Set Norman

SF1672, Linjär Algebra med Matlab för F1 Lab0

DN1212, Numeriska metoder & grundläggande programmering. Laboration 1 del 1-3 (frivilliga delar) Del 1-3 (dvs upg ) behöver inte redovisas

Labb 1 - Textbearbetning med reguljära uttryck. Formella språk. Definitioner. Chomskyhierarkin. Formella språk. Formella språk

emopluppen Användning av "Ant" Niklas Backlund Version: 1.4 ( 2002/04/26 07:27:52 UTC)

Xemacs, första hjälpen!

Operativsystem och användargränssnitt

Laboration 0. Enhetsbokstaven anges med ett kolon efter och man läser ofta ut detta, exempelvis C:(sekolon).

Om e-post. Introduktion till Emacs. Att skicka e-post. ÅÄÖåäö i pine. Varför Emacs? Vad är Emacs? Emacs en editor/textbehandlare

1.#Bakgrund# En#kort#introduk+on#+ll#Unix# Klassiskt#första#bemötande# Håkan#Jonsson# Ins+tu+onen#för#systemteknik# Luleå#tekniska#universitet#

Övningar till UNIX/Linux Grundkurs och förslag till LÖSNING

Övningar för del I av kursen

prog: prog.c gcc -g -Wall prog.c /usr/local/bib/c/58an/modules/modul.o -o prog

Introduktion till Matlab

Filsystem. Varför? Hur? För att kunna lagra data mer permanent än i RAM. Vettig organisation Vettiga namn

729G09 Språkvetenskaplig databehandling

Denna presentation är inte klar, kommentarer mottages tacksamt! CyberRymden

DD1315 Programmeringsteknik och Matlab för I1 Laborationer läsåret 2013/2014

LABORATION 4: Textmanipulering Introduktion till lingvistik och datalingvistik XD1110

Kursansvarig. Välkomna till NADA. Datorn som verktyg. Datalogi, grundkurs 1, 15hp

Välkomna till NADA. Datalogi, grundkurs 1, 15hp. (Numerisk Analys och DAtalogi) och kursen. DA2001 (Föreläsning 1) Datalogi 1 Hösten / 28

Kommandotolken hittar du under Start->Program->Tillbehör->Kommandotolken

MS-DiskOperativSystem Sammanfattning och Övningar

Transkript:

Kapitel 7 Reguljära uttryck och textbehandling Redan i kapitel 4 togs flera kommandon för textbehandling upp, som echo, head, fmt, sort, tail, tr. uniq och wc. Här kommer mer om sådant, i synnerhet reguljära uttryck. 7.1 Reguljära uttryck Vi har tidigare använt kommandot grep för att söka efter en textsträng. Ofta vill man göra mer avancerade sökningar än att bara söka efter en fix text. I många sammanhang går det att använda jokrar i stil med hur skalet gör för filnamn (s. 21), men en mycket mer kraftfull formalism som används i många sammanhang är reguljära uttryck. På engelska heter det regular expression vilket ibland kortas till bara regexp eller regex. I synnerhet är det reguljära uttryck som man använder för att söka med kommandot grep och dess variant egrep som vi kommer att använda i labben. Ett reguljärt uttryck är ett mönster som beskriver en mängd strängar. T. ex. beskriver det reguljära uttrycket [Dd]at(a or)lingvistik strängarna»datalingvistik«,»datorlingvistik«,»datalingvistik«och»datorlingvistik«, men inga andra strängar. Vi säger att detta reguljära uttryck matchar dessa fyra strängar (och att dessa fyra strängar matchar detta reguljära uttryck). 7.1.1 Metatecken De tecken som har speciell betydelse i reguljära tecken kallas för metatecken. Det finns olika varianter av reguljära uttryck med lite olika uppsättningar metatecken. Vanligt är att följande fjorton finns:. * +? ^ $ ( ) [ ] { } \ och det är reguljära uttryck med dessa som beskrivs nedan (men alla metatecken tas inte upp i detta kapitel). 7.1.2 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«. 7.1.3 Ett speciellt tecken: [ ] Om man ska beteckna ett tecken som inte får vara vad som helst använder man hakparenteser. Genom att räkna upp tecken inom [] kan man ange ett av dessa tecken, så [Dd]ator matchar»dator«eller»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å [^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. 7.1.4 Repetitioner: {}? * + Med {n} efter något kan man säga att detta något ska förekomma n gånger. Så x{3} matchar»xxx«71

7. REGULJÄRA UTTRYCK OCH TEXTBEHANDLING och [sz]{2} matchar»ss«,»sz«,»zs«och»zz«, dvs. samma som [sz][sz]. Med {n,m} ska det vara minst n och högst m förekomster, så br{2,5} matchar»brr«,»brrr«,»brrrr«och»brrrrr«. Observera att det bara är r som ska repeteras inte hela br. Maxantalet m kan utelämnas, och 8{3,} betyder minst tre åttor, dvs.»888«eller»8888«eller»88888«eller... (Hur många som helst.) Det finns specialbeteckningar för några av de vanligare repetitionerna:? är som {0,1} optionellt * är som {0,} godtyckligt många gånger + är som {1,} minst en gång Blanda inte ihop denna användning av * med jokerbetydelsen! I reguljära uttryck betyder inte * nånting för sig själv, utan det modifierar bara det som står precis innan, så i ab*c modifierar det b och hela uttrycket matchar»ac«,»abc«,»abbc«,»abbbc«, osv. Med.* kan man matcha godtyckligt många tecken, vilka som helst. Alltså matchar f.*f två f med vad som helst mellan sig, t. ex.»ful graf«,»fluff«eller»ff«. 7.1.5 Parenteser: ( ) Med parenteser kan man föra samman ett större uttryck. Det gör t. ex. att (br){2,5} matchar»brbr«,»brbrbr«,»brbrbrbr«och»brbrbrbrbr«. Fler exempel: mo(no)+ton matchar»monoton«,»mononoton«,»monononoton«, osv. ([ptkbdg][aeiou]){3} matchar trestaviga ord där varje stavelse består av en klusil + någon av de angivna vokalerna, t. ex. bikupa, pitebo eller tekaka. Man kan ha parenteser inom varandra. Med ((ba)+r){3} matchas t. ex.»bababarbarbabar«,»barbarbar«och mycket mer. 7.1.6 Alternativ: Med lodstreck ( ) visar man alternativ. (Observera att detta motsvarar hur lodstreck används i syntaxen på man-sidor s. 33.) Så foo bar matchar»foo«och»bar«. Om man vill att bara en mindre del av uttrycket ska ha alternativ får man använda parenteser: f(oo ba)r matchar»foor«och»fbar«. 7.1.7 Exempel Här är några ytterligare exempel på reguljära uttryck. [a-h][1-8] en ruta på ett schackbräde, som»e2«eller»b4«. [0-9]*[02468] en sekvens med siffror som slutar med en jämn siffra (tret fjor fem sex sjut ar nit)ton tjugo något av orden fr. o. m.»tretton«t. o. m.»tjugo«(..)* ett jämnt antal tecken, vilka som helst 7.2 egrep Det första argumentet till kommandot egrep ska vara ett reguljärt uttryck. Eventuella övriga argument är namn på filer att leta i, men om inga ges så söker egrep istället i standard input. Som output kommer alla rader i inputten som innehåller något som matchar det reguljära uttrycket. Om man lägger till... egrep regexp i ett kommando så fungerar det därför som ett filter som bara släpper igenom en del av raderna. Exempel: tail -n 20 FIL egrep 'x[0-9]{8}x' Finns det i de sista 20 raderna i filen FIL två x med exakt åtta siffror mellan sig? Eftersom man ofta har med tecken som skalet tolkar speciellt (t. ex. som jokrar!) i sina reguljära uttryck behöver man ofta sätta det argumentet inom citattecken som ovan. Det kan vara säkrast att ha som vana att göra det. 7.2.1 Väljare till egrep Det finns många väljare till kommandot egrep. Några av de mest användbara är: -c Ge inte raderna som output utan bara hur många rader som innehåller något som matchar det reguljära uttrycket (count) -i Ignorera (ignore) skillnader mellan stora och små bokstäver 72

Mer om tr Tabell 7.1: Några namngivna teckenklasser. Betydelserna är inte helt strikta här, utan kan variera med olika locale. Namn [:alnum:] [:alpha:] [:blank:] [:cntrl:] [:digit:] [:graph:] [:lower:] [:print:] [:punct:] [:upper:] Betydelse Alfanumeriska: [:alpha:] + [:digit:] Bokstäver: [:lower:] + [:upper:] Blanka tecken (mellanrum och TAB) Kontrolltecken Siffror Grafiska: [:alnum:] + [:punct:] Gemena (små) bokstäver Skrivbara: [:graph:] + mellanrum Interpunktion Versala (STORA) bokstäver -o Visa bara (only) den del av raden som matchade de reguljära uttrycket -v Motsatsen. Lista de rader som inte innehåller något som matchar det reguljära uttrycket Normalt så är egrep liksom många andra textbearbetningskommandon radorienterad. Det man får ut är inte förekomster av en viss text, utan rader som innehåller den texten. Det innebär att om man gör en sökning som egrep 'karakt[eä]ristisk' FIL och får ut fem rader så betyder inte det nödvändigtvis att ordet»karaktäristisk«(eller»karakteristisk«) förekommer fem gånger i filen, utan att det finns fem rader som innehåller den texten. Några av dessa rader innehåller kanske flera förekomster av texten! Med -o ändras detta. Då blir svaret bara den del av en rad som uttrycket matchar, och om det finns flera matchningar på samma rad så hamnar de alla i resultatet, en och en. 7.3 Teckenklasser Inne i teckenuppräkningar inom [] i reguljära uttryck kan man använda färdiga namngivna teckenklasser för många vanliga uppsättningar med tecken. Dessa har namn som börjar med [: och slutar med :], t. ex. [:lower:] för en gemen bokstav. Tabell 7.1 visar några av dessa. Hakparenteserna ingår i namnen på dessa teckenklasser så när de sätts inom [] blir det dubbla hakparenteser. T. ex. matchar [123[:upper:]!] ett tecken som är en siffra 1 3 eller en versal eller ett utropstecken. Ett reguljärt uttryck som ska matcha bara en versal blir [[:upper:]] med dubbla parenteser, medan t. ex. [^[:upper:][:digit:]_] matchar ett tecken som varken är versal, siffra eller understrykningstecken. Traditionellt har man skrivit t. ex. [A-Z] för att få en versal, och detta (och [a-z] och [A-Za-z]) kan man se på många håll i exempel på reguljära uttryck. Det är dock bättre att använda namngivna klasser. Då är man säker på att få med alla bokstäver, även t. ex. åäö. Vilka tecken som ingår i dessa olika klasser beror på vad ens locale säger om teckenkodning. Så länge filer stämmer med ens normala locale så fungerar det bra. Om man använder Unicode så omfattar [:alpha:] t. ex. inte bara latinska bokstäver, utan förstås även t. ex. grekiska och kyrilliska. Även [:digit:] omfattar då fler tecken än bara [0-9]. 7.4 Mer om tr 7.4.1 Teckenklasser i tr Även i argument till tr kan man använda teckenklasser, trots att det inte är reguljära uttryck. Så för att byta ut alla interpunktionstecken mot snedstreck kan man använda tr '[:punct:]' / Det första argumentet står här för flera tecken och det andra argumentet bara ett, så alla tecken i första argumentet omvandlas till samma tecken. Om det andra argumentet hade haft flera tecken hade olika interpunktionstecken omvandlats till olika tecken, men det finns inga garantier för i vilken ordning tecknen i [:punct:] räknas upp, så man bör inte göra så. Däremot är det garanterat att ordningen i [:upper:] och [:lower:] motsvarar varandra, så med tr '[:upper:]' '[:lower:]' och tr '[:lower:]' '[:upper:]' kan man omvandla text från versaler till gemener och tvärtom. Observera att man bör sätta dessa argument inom citattecken! Skälet är att annars tolkar skalet hakparenteserna särskilt. 73

7. REGULJÄRA UTTRYCK OCH TEXTBEHANDLING 7.4.2 Repeterade tecken Med notationen [c*n] i andraargumentet till tr menas n exemplar av tecken c, och med [c*] så många exemplar av tecken c som behövs för att fylla ut så det blir lika långt som förstaargumentet. Ett kommando som tr aeouyåäöaeouyåäö iiiiiiiiiiiiiiii kan därmed skrivas tr aeouyåäöaeouyåäö [i*8][i*8] vilket blir kortare. (Alla gemena vokaler blir i och alla versala vokaler blir I. Det sista argumentet hade också kunnat skrivas [i*8][i*].) Vi har tidigare sagt att det sista tecknet i andra argumentet automatiskt kommer att räknas som repeterat, och så är det i GNU som har ärvt detta beteende från BSD, men olika implementationer av tr gör olika och standarden (POSIX) lämnar detta ospecificerat, så om något ska fungera på flera olika system bör man säkrast skriva t. ex. tr '[:punct:]' '[/*]' för att byta ut all interpunktion mot snedstreck. Ni behöver inte göra så, men ni bör känna igen detta. 7.4.3 Att ta bort tecken med tr Med väljaren -d (--delete) till tr tar man bort angivna tecken istället för att byta ut dem. Då använder man bara ett argument vilka tecken som ska tas bort. Så med tr -d 0-9 tar man bort alla siffror och med tr -d '[:punct:]' tar man bort all interpunktion. Ett annat sätt att ta bort tecken är med -s (--squueze-repeats) som klämmer ihop flera likadana tecken efter varann till ett. Med tr -s ' ' klämmer man t. ex. ihop varje förekomst av flera mellanrum efter varann till bara ett. Ofta har man särskild anledning att göra en sådan klämning efter att man bytt ut tecken. Om man t. ex. byter ut alla mellanrum mot nyradstecken så uppstår det kanske just på grund av detta flera nyradstecken i rad för att man ibland hade mellanrum i början eller i slutet av en rad. Om man i sådana lägen bara vill ha ett nyradstecken där ändå så bör man alltså först byta ut mellanrum mot nyrad och sen klämma ihop nyrader: tr ' ' '\n' tr -s '\n' Dessa operationer går att slå ihop genom att ge -s tillsammans med två argument till tr: tr -s ' ' '\n' Då kommer kommandot först att byta ut som om man inte givit -s och sen att»klämma ihop«tecken enligt det andra argumentet. 7.5 Kommandot cut Ofta vid textbearbetning använder man textfiler där varje rad består av flera fält. I tidigare labbar har ni använt en fil rummet.words som är sådan. Där ligger på varje rad ett ord och en ordklassbeteckning. Mellan dessa ligger det speciella TAB-tecknet. Med kommandot cut kan man plocka ut enstaka fält från sådana textfiler. Det går att använda någon annan avgränsare mellan fälten, men det normala är just TAB-tecknet. Om cut får argument så ska det vara filnamn och då läser den in dessa filer. Annars använder den standard input. 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 är fält 1. (Det går också att plocka ut vissa tecken från en rad istället för vissa fält, t. ex. tecken 4 6. Se dokumentationen om du behöver detta!) Här följer exempel där första respektive andra fältet i rummet.words plockas ut. För att ge mindre output används genomgående head för att bara ta fram de tio första raderna. TAB-tecknet: TAB-tecknet är ett kontrolltecken som beskrevs på s. 48. När det ligger i filer är det ofta för att avdela fält från varann, eller också när många rader har stort indrag för att minska på antalet mellanrumstecken i filen. Det finns en särskild TAB-tangent på tangentbordet, men i många sammanhang lägger den inte in TAB-tecknet. Dels så lägger den ofta in»lagom«mycket indrag vilket ofta är mindre än ett helt TABtecken, dels används den till komplettering i många sammanhang. 74

Kommandot cut $ head rummet.words Det pron var verb en art afton subst i prep början subst av prep maj subst. punkt Den pron $ cut -f 1 rummet.words head Det var en afton i början av maj. Den $ cut -f 2 rummet.words head pron verb art subst prep subst prep subst punkt pron Med kommandot paste kan man sätta ihop sådana här filer med flera fält, men det tar vi inte upp här. 75

Laboration 7: Reguljära uttryck och textbehandling Redovisning Svara på frågorna. Om du behövde ge kommandon för att få fram svaret så tala om hur dessa kommandon löd. Det ideala är om du har ett kommando som bara ger svaret och inget annat så att du inte behövde se igenom mycket output och plocka ut svaret därifrån för hand. Skicka datorpost till Per senast 17/11. Om komplettering behövs ska den vara klar senast 23/11. När filer nämns med bara ett namn så ligger de i /local/kurs/gdb06/. Five by five I filen femmor finns en (tyvärr inte felfri) samling med svenska ord som är fem tecken långa. Uppgifterna i detta avsnitt gäller alla denna ordlista. Ge svar på frågorna samt ett kommando som ger svaret. Uppgift 7.1 Hur många ord innehåller q eller z? Uppgift 7.2 Vilka ord innehåller tre vokaler i rad? Uppgift 7.3 Vilka ord innehåller både j och x? Uppgift 7.4 Vilka ord innehåller två å:n med exakt en bokstav mellan sig? (Som t. ex.»blådåre«och»vrålåk«för att ge två exempel som är längre än fem bokstäver.) Uppgift 7.5 (Korsord) Vi söker ett fembokstavigt ord. Första bokstaven måste vara b, p eller v. Andra bokstaven är säkert ett ö. Sista bokstaven är e eller o. Vad kan det vara för ord? Uppgift 7.6 Vilka ord innehåller inte någon av bokstäverna i»eantrsildomk«? (De vanligaste bokstäverna i svenska enligt Nusvensk frekvensordbok.) Uppgift 7.7 Vilket ord innehåller något annat ickealfabetiskt tecken än bindestreck? Uppgift 7.8 Vilka ord innehåller två e:n med ett eller flera p:n (men inget annat) mellan sig? Uppgift 7.9 Hur många ord innehåller minst två b:n (inte nödvändigtvis direkt efter varann)? Mera regexpar Uppgift 7.10 Det reguljära uttrycket ab?c[de] beskriver strängarna»acd«,»ace«,»abcd«och»abce«. Vilka strängar beskriver följande reguljära uttryck? (Ange samtliga strängar!) a) h[aio] b) rök?fritt c) H(ej opp)san h(ej opp)san! d) (foo?)?bar Uppgift 7.11 Ge ett reguljärt uttryck som matchar orden»mormor«,»morfar«,»farmor«och»farfar«. Uppgift 7.12 Ge ett reguljärt uttryck som matchar ord i stil med»mormorsfar«och»farmorsmor«för personer tre generationer upp. Uppgift 7.13 Ge ett reguljärt uttryck som matchar både»color«och»colour«(men inget annat). Uppgift 7.14 Ge ett reguljärt uttryck som matchar ett positivt tal skrivet med siffror, som»1«,»2«,»3«, 77

LABORATION 7: REGULJÄRA UTTRYCK OCH TEXTBEHANDLING events, as well as giving a clear picture of this community in its prime.) When the AI lab bought a new PDP-10 in 1982, its administrators decided to use Digital s non-free timesharing system Figur 7.1: Några rader ur THE-GNU-PROJECT.»4«,»5«,»6«,»7«,»8«,»9«,»10«,»11«,»12«,»13«osv. till hur höga tal som helst. (Första siffran är speciell!) Uppgift 7.15 I filen THE-GNU-PROJECT finns flera förekomster av sifferuttryck. Ge en lista i nummerordning över alla sådana! På den mellersta raden i figur 7.1 finns t. ex. två sifferuttryck:»10«och»1982«. Uppgift 7.16 Ge ett kommando som listar alla förekomster av minst tre versaler i rad i samma fil i frekvensordning! Uppgift 7.17 Ge ett kommando som listar alla rader i THE-GNU-PROJECT som innehåller exakt tre siffror i följd någonstans inne i raden, dvs. med en icke-siffra direkt före och en icke-siffra direkt efter. Det finns bara en sådan rad. Transmogrifiera med tr Uppgift 7.18 Ge ett kommando som återger filen /local/texts/jabberwocky med alla»grafiska«tecken utbytta mot»x«. Uppgift 7.19 Ge ett kommando som tar bort alla kontrolltecken ur en text. Uppgift 7.20 Ge ett kommando som omvandlar varje sekvens med en eller flera siffror till ett»*«. (Texten»5 myror är färre än 44001 elefanter«ska alltså bli»* myror är färre än * elefanter«.) Slå upp dokumentationen i Info om tr. Uppgift 7.21 Det finns en väljare -c till tr. Vad betyder den? Uppgift 7.22 Så hur ger man ett kommando som byter ut allt som inte är en bokstav mot tecknet»_«? Uppgift 7.23 Vilket sätt att bryta upp text så att man får ett ord per rad rekommenderas i Infodokumentationen om tr (förutsatt att man har en tr som följer POSIX)? Uppgift 7.24 Ge ett kommando som listar de tjugo vanligaste orden i THE-GNU-PROJECT. Använd sättet att lägga ett ord per rad från förra uppgiften. Konvertera dessutom allt till små bokstäver så att t. ex.»the«och»the«inte räknas som olika ord. (Jämför uppgift 4.18!) (Trots förbättringarna är detta inte alltid ett idealiskt sätt att dela upp en text i ord. Interpunktionstecken kan ibland ingå inne i ord, t. ex. bindestreck i ord som»abc-bok«och»spin-off«och apostrof i ord som»så nt«och»don t«. Ibland vill man för övrigt behålla skiljetecken!) And... cut! Uppgift 7.25 Vilka ordklasser förekommer i rummet.words? Uppgift 7.26 Ge en frekvenslista över ordklasserna i rummet.words! I rummet.words finns såväl de art som de pron, så grafordet»de«kan både vara artikel och pronomen. Det finns flera sådana ord. Uppgift 7.27 Vilka ord i rummet.words förekommer där med minst två olika ordklasser? (När jag gjorde denna uppgift upptäckte jag ett fall där ett ord i rummet.words har råkat få helt fel ordklass förresten. Ursäkta!) 78

Innehåll 0 Introduktion 3 0.1 Operativsystem.......................................... 3 0.2 Unix................................................ 3 0.3 GNU............................................... 4 0.4 Linux............................................... 5 0.5 Persondatorer och Microsoft................................... 5 0.6 Unix och Unix-liknande system idag.............................. 6 0.7 Det grafiska användargränssnittet................................ 6 0.8 Vårt datorsystem......................................... 7 Våra datorsalar.......................................... 7 Att logga in............................................ 7 Ljud................................................ 8 1 Filer och kataloger 9 1.1 Filnamn.............................................. 9 Filnamnsändelse......................................... 9 Osynliga filer........................................... 10 1.2 Kataloger............................................. 10 Filträdet.............................................. 10 Fullständiga sökvägar....................................... 10 1.3 Grafisk filhantering........................................ 11 1.4 Desktop.............................................. 11 1.5 Textfiler.............................................. 12 1.6 Editorer.............................................. 12 Emacs............................................... 12 1.7 Filskydd.............................................. 13 Laboration 1: Intro och filer 15 Datorpost................................................ 15 Grafisk filhantering........................................... 15 Emacs.................................................. 17 Jag vill öva mera!............................................ 17 Slutord................................................. 18 2 Skalet 19 2.1 Terminalen............................................ 19 2.2 Skalet............................................... 20 2.2.1 Kommandon....................................... 20 2.2.2 Argument till kommandon................................ 20 79

INNEHÅLL 2.2.3 Jokrar........................................... 21 2.2.4 Aktuell katalog...................................... 21 2.2.5 Väljare (options)...................................... 21 2.2.6 Kommandon och program................................ 23 2.2.7 När det blir fel...................................... 23 2.3 Relativa sökvägar......................................... 24 2.4 Filhantering i skalet........................................ 24 2.4.1 Lista filer......................................... 24 2.4.2 Kopiera filer........................................ 24 2.4.3 Flytta filer......................................... 24 2.4.4 Ta bort filer........................................ 24 2.4.5 Skapa och ta bort kataloger............................... 24 Laboration 2: Skalet 25 Emacs.................................................. 25 Terminal................................................. 25 Skalet.................................................. 25 Redovisning............................................... 27 3 Mer om skalet 29 3.1 Omdirigering........................................... 29 3.2 Miljövariabler........................................... 30 3.3 Expansion av skalet........................................ 30 3.4 Dokumentation.......................................... 30 3.4.1 man-sidor......................................... 30 3.4.2 --help.......................................... 32 3.4.3 Kommandosyntax.................................... 32 3.5 Filskydd i skalet.......................................... 33 3.6 Utskrifter från skalet....................................... 33 3.7 Skalskript............................................. 33 Laboration 3: Mer om skalet 35 Expansioner i skalet.......................................... 35 Det var en gång.............................................. 35 Omdirigering.............................................. 35 Dokumentation............................................. 36 Skalskript................................................ 37 Emacs tutorial.............................................. 37 Redovisning............................................... 38 4 Ännu mer om skalet 39 4.1 Kommandorör.......................................... 39 4.2 Texthantering........................................... 39 4.2.1 echo............................................ 40 4.2.2 grep............................................ 40 4.2.3 head............................................ 40 4.2.4 fmt............................................ 40 4.2.5 more............................................ 40 4.2.6 sort............................................ 40 4.2.7 tail............................................ 40 80

4.2.8 tr............................................. 40 4.2.9 uniq............................................ 41 4.2.10 wc............................................. 41 4.3 Språkinställningar......................................... 41 4.3.1 Språkinställning i Gnome................................ 41 4.3.2 Språkinställningar i skalet................................ 41 4.3.3 Att sätta om en variabel temporärt........................... 42 4.3.4 Sortering......................................... 42 4.3.5 När använda detta?.................................... 43 4.4 Köra program i bakgrunden................................... 43 Laboration 4: Ännu mer om skalet 45 Sortering................................................ 45 Översättning.............................................. 45 Gott och blandat............................................ 45 Frekvensordlista............................................. 46 Påhitt.................................................. 46 Redovisning............................................... 46 5 Teckenrepresentation 47 5.1 Teckenkoder............................................ 47 5.2 Att ange teckenkodning..................................... 47 5.3 ASCII............................................... 47 5.4 Kontrolltecken.......................................... 48 5.5 ISO 8859-*............................................ 48 5.6 Microsoft Windows........................................ 49 5.7 ISO 10646 = UCS Unicode.................................. 49 5.7.1 Kombinerande tecken.................................. 50 5.7.2 Att lagra Unicode i filer................................. 50 5.8 Vad är olika tecken?....................................... 51 5.8.1 Flera tecken räknas som samma............................. 52 5.9 Att hantera filer med olika teckenkodning........................... 52 5.9.1 Olika teckenkodningar i Emacs............................. 52 5.9.2 Att konvertera mellan teckenkodningar......................... 53 5.10 Att skriva andra tecken i Emacs................................. 53 5.11 Hos oss.............................................. 53 Laboration 5: Emacs, Info och teckenkodningar 55 Kontrolltecken............................................. 55 Info................................................... 55 Skapa en UTF-8-fil........................................... 57 iconv................................................... 57 Uppror!................................................. 58 recode.................................................. 58 Överkurs................................................ 59 Redovisning............................................... 59 81

INNEHÅLL 6 Dokumentrepresentation 61 6.1 Exempel: spelkort........................................ 61 6.2 MIME............................................... 61 6.3 Uppmärkt text.......................................... 62 6.4 XML................................................ 62 6.4.1 Taggar........................................... 62 6.4.2 Attribut.......................................... 62 6.4.3 Toppnivå......................................... 63 6.4.4 Teckenreferenser och entiteter.............................. 63 6.4.5 Olika XML-språk..................................... 63 6.5 WWW och HTML........................................ 63 6.5.1 Internet.......................................... 63 6.5.2 World Wide Web..................................... 64 6.5.3 HTML........................................... 64 Repetitionsuppgifter 65 Sökvägar................................................. 65 Skalkommandon............................................ 65 Redovisning............................................... 65 Laboration 6: XML och HTML 67 XML i Emacs.............................................. 67 Att publicera på WWW........................................ 68 HTML.................................................. 68 Överkurs................................................ 69 Mer teve.............................................. 69 WWW............................................... 69 Redovisning............................................... 69 7 Reguljära uttryck och textbehandling 71 7.1 Reguljära uttryck......................................... 71 7.1.1 Metatecken........................................ 71 7.1.2 Ett godtyckligt tecken:.................................. 71 7.1.3 Ett speciellt tecken: [ ]................................. 71 7.1.4 Repetitioner: {}? * +................................. 71 7.1.5 Parenteser: ( )...................................... 72 7.1.6 Alternativ:....................................... 72 7.1.7 Exempel.......................................... 72 7.2 egrep................................................ 72 7.2.1 Väljare till egrep..................................... 72 7.3 Teckenklasser........................................... 73 7.4 Mer om tr............................................ 73 7.4.1 Teckenklasser i tr.................................... 73 7.4.2 Repeterade tecken.................................... 74 7.4.3 Att ta bort tecken med tr................................ 74 7.5 Kommandot cut......................................... 74 82

Laboration 7: Reguljära uttryck och textbehandling 77 Redovisning............................................... 77 Five by five............................................... 77 Mera regexpar.............................................. 77 Transmogrifiera med tr........................................ 78 And... cut!.............................................. 78 Register 84 83

Register Detta register omfattar kapitel 0 7 och ersätts med ett nytt när nästa kapitel kommer ut.. (i sökvägar), 24. (kommando), 33.. (i sökvägar), 21, 24 < (i omdirigering), 29 > (i omdirigering), 29 &, se bakgrunden \, se bakstreck (i kommandorör), 39, se tilde Aegis, 4 AIX, 4, 6 aktuell katalog, 21 Alice i Underlandet, 16 ANSI, se även windows-1252 användargränssnitt, 6 7 användarnamn, 7 apostrof, 52 Apple Computer, 3, 5 7 arabiskt alfabet, 49 arbetskatalog, se aktuell katalog arbetsstation, 4 argument, 20 ARPANET, 63 ASCII (American Standard Code for Information Interchange), 47 ASR33, 19 Babbage, Charles, 4 backslash, se bakstreck bakgrunden köra program i, 43 bakstreck, 10, 46 bash, 20 Bell Labs, 3, 6, 20 Berkeley Software Distribution (BSD), 4, 6, 74 Berners-Lee, Tim, 64 binärfiler, 9 BMP (Basic Multilingual Plane), 50, 51 Bourne, Steve, 20 broken bar, 39 BSD, se Berkeley Software Distribution byte, 9, 47 jämfört med tecken, 51 C, 9 carriage return, se returtangenten Carroll, Lewis, 16 cat (kommando), 20, 30 cd (kommando), 20, 21, 23 chmod (kommando), 33 citattecken, 52 Command Line Interface (CLI), 19 Common Desktop Environment (CDE), 7 compose (tangent), se kombinationstangent cp (kommando), 20, 21, 24, 32 CRLF, 48 cut (kommando), 74 data, 3 date (kommando), 22 dator, 3 datorpost, 15 Debian GNU/Linux, 6 Desktop (katalog), 11 12 Dodgson, Charles Lutwidge, se Carroll, Lewis domännamn, 63 EBCDIC, 47 echo (kommando), 27, 40 editor, 12 egrep (kommando), 71, 72 Emacs, 12, 37, 52, 55 Engelbart, Douglas, 7 ENIAC, 4 84

Register Enigma, 4 factor (kommando), 29 Fedora Core, 6, 7 fil, 9 osynlig, 10 skydd, 13, 33 filnamn, 9 10 filnamnsändelse, 9 10 filter, 72 filträd, 9 Firefox, 15 Fitzschkloff, Ferdinand, 58 flagga, se även väljare, 22 fmt (kommando), 36, 40 free software, 4 Free Software Foundation (FSF), 4 FreeBSD, 6 fri programvara, 4 fullständig sökväg, se sökväg, fullständig Gentoo, 6 glyf, 52 Gnome, 7 GNU, 4 5, 7, 20, 32, 55, 74 GNU Emacs, se Emacs GNU/Linux, 5 7 Graphical User Interface (GUI), 7 grekiskt alfabet, 49 grep (kommando), 40, 71 grupp, 13 Gällmo, Gunnar, se Fitzschkloff, Ferdinand han, 49 hangul, 49 head (kommando), 37, 40 hebreiskt alfabet, 49 hemkatalog, 7, 10 hiragana, 49 HP-UX, 6 HTML, 10 HURD, 5 hypertext, 7, 64 hårdvara, 3 IANA, 61 IANA (Internet Assigned Numbers Authority), 47 IBM, 5, 47 IBM PC, 5 iconv (kommando), 53 ideografiska tecken, 49 Info, 30, 55 informationsrad (i Emacs), 25, 35, 37, 52, 57, 58, 67 inloggning, 7 inputmetod i Emacs, 53 Internet, 63 64 ISO, 41, 49 ISO 639-1, 42 ISO 3166-1, 42 ISO 8859-*, 48, 49 ISO 8859-1, 49, 50 ISO 10646, se UCS japanska, 49 Java, 10 joker, 21, 30 Kaka, Ellen, 10 11, 13, 17 katakana, 49 katalog, 10 aktuell katalog, 21 KDE, 7 kinesiska, 49 klipp-och-klistra, 17 kombinationstangent, 65 kombinerande tecken, 50 kommandorad, 19 kommandorör, 39 kompilator, 9 komplettering, 16 i bash, 25 i Emacs, 17 kontrolltecken, 48 koreanska, 49 kyrilliskt alfabet, 49 källkod, 9 LANG (miljövariabel), 41, 53 värde C, 43 Latin1, 49, se även ISO 8859-1 Linux, se även GNU/Linux, 5 locale, 41, 53 lodstreck, 39 lpr (kommando), 33 ls (kommando), 20 22, 24, 30, 32 lösenord, 7 märkspråk, 63 85

Register Macintosh, 7 MacOS, 3 MacOS X, 3, 6 man (kommando), 30 man-sida, 30 Massachusetts Institute of Technology (MIT), 4, 5, 7, 12, 64 matchning av reguljära uttryck, 71 Melkersson, Melker, 62 mellanslag i filnamn, 9, 21, 22 meta-tangent i Emacs, 38 metatecken, 71 Microsoft, 5 7 Microsoft Windows, 3, 6, 7, 49 miljövariabel, 30 miljövariabel ändra värde, 42 MIME, 61 minibuffert (i Emacs), 17 minidator, 4 Minix, 5 MIT, se Massachusetts Institute of Technology mjukvara, 3 mkdir (kommando), 20, 24 modeline (i Emacs), se informationsrad more (kommando), 40 MS-DOS, 5, 6 Multi_key (tangent), se kombinationstangent mus, 6, 7 mv (kommando), 20, 24 Nautilus, 11 NetBSD, 6 Niue, 64 omdirigering, 29 Open Group, The, 6 OpenBSD, 6 OpenDocument, 10, 12, 63 operativsystem, 3 option, se väljare Palo Alto Research Center (PARC), 7 paste (kommando), 75 Paterson, Tim, 6 PATH (miljövariabel), 30 PC-DOS, 6 Perl, 10 persondator, 5 pipe, 39 plain text, 12, 47 plan (i UCS/Unicode), 50 POSIX, 6, 74 program, 3 Projekt Runeberg, 58 prompt, 20 pwd (kommando), 20, 21 Python, 10, 16 QDOS, 6 recode (kommando), 58 Red Hat Linux, 6 redirection, se omdirigering regex(p), se reguljärt uttryck regular expression, se reguljärt uttryck reguljärt uttryck, 71 relativ sökväg, se sökväg, relativ return, se returtangenten returtangenten, 20 rm (kommando), 20, 24 rmdir (kommando), 20, 24 roten, 10 Runeberg, se Projekt Runeberg SGML (Standard Generalized Markup Language), 62 shell, se skal shell script, se skalskript Single Unix Specification, 6 skal, 20 skalskript (shell script), 33 SMP (Supplementary Multilingual Plane), 50 Solaris, 4, 6 sort (kommando), 36, 40 sortering, 42 språkinställning, 41 SRI, se Stanford Research Institute SSP (Supplementary Special-purpose Plane), 50 Stallman, Richard M., 4, 5, 12 standard input, 29, 39 standard output, 29, 39 Stanford Research Institute (SRI), 7 stdin, se standard input stdout, se standard output SUSE Linux, 6 sökväg 86

Register fullständig, 10, 24 relativ, 24 tagg, 62 tail (kommando), 37, 40 Tanenbaum, Andrew S., 5 tecken jämfört med byte, 51 teckenklass, 73 teckenkodning, 12, 47 TEI (Text Encoding Initiative), 63 teleprinter, 19 Teletype Corporation, 19 terminal, 19 TEX, 10 textfil, 12 textredigerare, se editor tidsdelning, 6 tilde ( ) i sökvägar, 11 Torvalds, Linus, 5 tr (kommando), 40, 73, 74 translitterering, 53 Turing, Alan, 4, 22 Tuvalu, 64 vagnretur, se returtangenten wc (kommando), 31, 41, 51 webbpost, 15 vertical bar, 39 vi, 12 windows-1252, 49 WinLatin1, se windows-1252 working directory, se aktuell katalog World Wide Web (WWW), 64 väljare, 21 kombinera, 23 långa, 22 med argument, 22 X Window System, 5, 7 X11, se X Window System XCES (Corpus Encoding Stanford for XML), 63 Xerox, 7 XHTML, 64 XML, 10, 62 Z3, 4 Zuse, Konrad, 4 ångra (undo) i Emacs, 58 Ubuntu, 6 UCS (Universal Character Set), 49, se även Unicode Ultrix, 4 underkatalog, 9, 10 undo, se ångra Unicode, 49, se även UCS uniq (kommando), 36, 41 Univac I, 4 University of California, Berkeley, 4 Unix, 3 4 varumärke, 6 Un*x, 6 URI (Uniform Resource Identifier), 64 URL (Uniform Resource Locator), 64 US-ASCII, se ASCII user interface, se användargränssnitt UTF-8, 51 UTF-16, 51 UTF-16BE, 51 UTF-16LE, 51 UTF-32, 51 utloggning, 8 utskrift, 33 87