Tekstmanipulatie Week 3: Reguliere expressies Gosse Bouma g.bouma@rug.nl Informatiekunde Rijksuniversiteit Groningen 2007/2008 Gosse Bouma 1/38
Overzicht 1 Wildcards 2 Keuze 3 Ranges 4 Begin en Eind van een regel 5 Extended grep (egrep) 6 Vervangen Gosse Bouma 2/38
Zoeken naar patronen Zoek in tekst naar alle woorden die beginnen met anti woorden met 12 letters, woorden van drie of meer lettergrepen groepen van twee woorden beginnend met ter telefoonnummers, email-adressen, URLs Gosse Bouma 3/38
Vervangen van tekst Vervangen of verwijderen van tekst vervang herfst door najaar verwijder html mark-up, vervang ë door ë,... vervang email-adres, telefoonnummer door EMAIL, TEL deel een tekst op in regels Gosse Bouma 5/38
Reguliere expressies Patronen Reguliere expressies zijn patronen die matchen met strings die o.a. worden gebruikt in grep (zoeken) en sed (vervangen) Gosse Bouma 6/38
Wildcards Een willekeurig teken Een. matcht met een willekeurig teken > grep -w herfst wikipedia.txt > grep -ow he..st wikipedia.txt herfst heerst hengst heetst het st Gosse Bouma 8/38
Wildcards Een willekeurig aantal Een * achter een letter betekent 0 of meer keer > grep -ow ma*n > grep aaaa* man totaaal maan aaangeduid mn uiteraaard Gosse Bouma 10/38
Kiezen Kiezen tussen tekens Tekens tussen [] betekent een van deze tekens > grep -ow m[aei]n > grep -ow m[aeiou]*n man man men maaien min mn muon mien Gosse Bouma 12/38
Complement Complement van een verzameling [^abc] betekent alle tekens behalve a, b, en c > grep -ow m[^auio]n men mensen mensenrecten meerderen mensen met een met enkele reflexen Behalve woorden vinden we ook meerdere woorden achter elkaar... Gosse Bouma 14/38
Complement Woorden zonder uaio Voeg een spatie toe aan de verzameling waarvan je het complement neemt grep -ow m[^auio ]n Let op de quotes! Anders leest de shell dit als 2 quotes Woorden zonder uaio Gebruik een pipe grep -ow m[^auio]n wikipedia.txt grep -v Gosse Bouma 16/38
Complement Woorden zonder uaio Voeg een spatie toe aan de verzameling waarvan je het complement neemt grep -ow m[^auio ]n Let op de quotes! Anders leest de shell dit als 2 quotes Woorden zonder uaio Gebruik een pipe grep -ow m[^auio]n wikipedia.txt grep -v Gosse Bouma 16/38
Ranges Een range is een verzameling tekens [a-z] betekent een van de tekens tussen a en z > grep -ow [a-z]*ooi[a-z]* voltooid nooit ooit grandslamtoernooi Merk op dat het patroon niet matcht met spaties e.d. Gosse Bouma 18/38
Ranges Een range is een verzameling tekens Betekenis van een range hangt af van de character encoding UTF-8 ISO-8859-1, latin1 windows-1250... [a-z] betekent niet altijd alleen kleine letters In UTF-8 matcht [a-z] met aabb...yyz Gosse Bouma 20/38
Predefined Ranges Aan enkele sets van tekens is een speciale naam gegeven De volgende character sets leveren steeds dezelfde tekens, onafhankelijk van de encoding [:lower:] lower case letters [:upper:] upper case letters [:alnum:] of \w een letter of een getal \W niet een letter of een getal Gosse Bouma 22/38
Predefined Ranges > grep -ow [[:lower:]] l m o s p à Merk op dat ook letters met diacritische tekens matchen Gosse Bouma 24/38
Begin en Eind van een regel Zoek woorden aan het begin van een regel grep ^Amsterdam retourneert alle regels die beginnen met Amsterdam > grep ^Amsterdam is een Amsterdam is een linkse stad Amsterdam is een grootstedelijke gemeente Amsterdam is een stad in Bates County in de staat Miss Gosse Bouma 26/38
Begin en Eind van een regel Zoek woorden aan het eind van een regel grep Amsterdam$ retourneert alle regels die eindigen met Amsterdam > grep [a-z]*ste [a-z]* van Amsterdam.$ grootste evenement van Amsterdam. belangrijkste station van Amsterdam. grootste studentengezelligheidsvereniging van Amsterda voornaamste marineschilder van Amsterdam. Gosse Bouma 28/38
egrep grep -e = egrep Sommige patronen werken alleen wanneer je de -e optie gebruikt of het commando egrep s? s is optioneel s? s komt 1 of meer keer voor (herfst najaar) match met de string herfst of met de string najaar > grep besturings?systeem sort uniq -c 907 besturingsssyteem 17 besturingsysteem Gosse Bouma 30/38
sed stream editor sed sed s/herfst/najaar/ vervangt de string herfst door najaar > less weer.txt de herfst is natter dan de herfst van 2006 de winter is al begonnen > sed s/herfst/najaar/ herfst.txt de najaar is natter dan de herfst van 2006 de winter is al begonnen Gosse Bouma 32/38
sed opties voor s/regex/replacement/ g = globally, vervangt alle matches op een regel i = case-insensitive > sed s/de herfst/het najaar/g herfst.txt het najaar is natter dan het najaar van 2006 de winter is al begonnen Gosse Bouma 34/38
Redirects Schrijf uitvoer naar een bestand commando > filename schrijft resultaat van commando naar bestand filename sed s/de herfst/het najaar/g herfst > najaar.txt Gosse Bouma 36/38
Zoeken en vervangen Namen van bedrijven in Wikipedia Zoek naar tekst die de reeks bedrijf Naam RestvdNaam bevat verwijder bedrijf > egrep -o bedrijf ([A-Z]\w* )+ sed s/bedrijf // Google Apple Exxon America Online Nintendo Estee Lauder Gosse Bouma 38/38