Ailler først: Førr at du ska slæppe å lure mer korsn æ klarte å lage en så fin logo tell deinna artikkelen så må æ ailler først hænvis dæ tell http://wordle.net/. Dær kain main få de lækraste bildan laga utav dein mæst gruvækkanes tørre tæksten. Knaill! Men så tell oppgavan om regulære uttrøkk:
Dagens oppdrag haindle om regulære uttrøkk og e tredelt:
- Først tælle replikkan tell han stakkars Horatio i William Shakespeare sin “Hamlet”. Vi fikk tørrstoffet utdelt som tækstfil uten bilda.
- Dærnæst sku vi finne ut av korr mange ganga kvær bokstav i det ængelske alfabete va brukt i førnævnte tækstfil. Vi sku også gjør det samme med James Joyce sin “Ulysses” som e en murstein av ei bok og som vesstnok blir rangert som ailt fra mesterværk tell makkværk, ailt ætte kæm du spør. Du træng ikkje spør mæ; æ har ikkje læst nån av dæm.
- Heilt tell sluitt sku vi fuindere på ka slags bruk main kain ha av sånne regulære uttrøkk og dein informasjon main faint i de to første oppgavan.
1. Ho, ho, ho, Horatio
Deinna oppgaven va ikkje så vanskelig og dein kain løyses på mange måta. Sånn gjorde æ det:
Via UNIX/Linux Shell Cheat Sheet faint æ at GREP-kommandoen måtte være go knaill. Og via ei nættsia om Grep fikk æ greit førrklart at brytarn “-c” va ægna tell å tælle lenjen som “grep” returnerte. Så langt va det greitt.
Horatio sine replikka begynte aille med “Hor.” og sto ailltid på ei linja førr sæ sjøll før sælve replikken starta rætt uinne derigjæn. Førr å finne lenje som kun begynte med “Hor.” måtte det nåkka ainna tell. Ætte nåkka leiting faint æ at bruk av tægne “^”, (som på ængelsk kailles “karet”) sku verke. Tipse faint æ via deinne nættsia. Dein gjør at “grep” bærre leite i begynnelsen av lenjen. Førr at æ i tellægg sku finne kun ordan som ble skrevven akkurat som “Hor.” med punktum og ailt måtte det einnu meir finurlighet tell. Regex behaindle noen tegn på spesiell måte (kailles Metatægn), og punktom e en av de. Dermed må main sætte “\” framfør “.” før at åsså dein ska få være med i uttrøkke. På samme sted kain main læse at dobble fnutta (“) må stå ruindt tækststrængen før at dein ska læses som et heilt uttrøkk som ska stå førr sæ sjøll. Dermed blei REGEX-uttrøkke sånn:
grep -c ^”Hor\.” hamlet.txt
2. Å tælle tægn
Deinna oppgaven va en kraftig smule vanskeligar. Sia det e to tækstfile og main må gå mange ganga igjønna kvær fil før å sjå på antall ganga kvært tægn va brukt e det nok lurast å bruke et script. Ætte nåkka trøbling faint æ ut at æ måtte bruke bash script på gruinn at bash har nån fleire muliheita einn reint sh-script. Her e scripte æ kom fram tell, inkludert førrklaring. Lenjenummeran telhøre ikkje scripte, mæn e sætt på førr å gjør det lættar å forklare:
1. #!/bin/bash
2. # “Dette scriptet teller antall ganger hvert tegn i to tekstfiler”
3. echo “Dette scriptet teller antall ganger hvert tegn fra a-z forekommer i to ulike tekstfiler”
4. for char in {a..z}
5. do
6. echo “Bokstaven $char forekommer `grep -o -i $char hamlet.txt | wc -w` ganger i Hamlet”
7. echo “Bokstaven $char forekommer `grep -o -i $char ulysses.txt | wc -w` ganger i Ulysses”
8. done
- Vise at det e et bash-script
- Intern kommentar tel læsar av scripte
- Melding tell skjærm om ka scripte gjør
- Start på for-løkka: lar variabeln “char” ætte tur får verdien av alle bokstava fra a tel og med z.
- Førtælle at nåkka ska gjøres…
- grep -o -i #Svitsjen “-o” gjør at main finn bærre dein bokstaven man leite ætte, mæns svitsjen “-i” gjør at dein finn både store og små bokstava.
Grep-kommandoen leite så ætte variabeln “char” i hamlet.txt og pipe(|) dettan videre tell “wc -w”. Kommandoen “wc” tælle tægn, ord eiller lenje, ailt ætte ka main vil. Og med svitsjen “-w” finn main kun aille ord som mætsje søkeorde. Og når søkeorde e kun en bokstav blir det like greit å bruke -w svitsjen.
- Gjør det samme med ulysses.txt
- Avslutte for-løkka
3. Koffør e dettan nøtti?
Tænk dæ at main f.æks ska søke ætte og/eiller erstatte tægn/ord/lenje i en hau av file. Gjør main det i et GUI kan main nok klare oppgaven i de fleste tellfeillan, mæn antakelig sørgelig sakte. Gjør main det i et commandolenje-grænsesnett går det ailt i fra litt tell vanvettig mykje fortar. Når main bærre har fuinne syntaxen på commandoen ailtså…..
