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