Grep bij benadering

Met het Unix-programma grep kun je zoeken naar specifieke patronen tekst, maar typefouten of varianten vind je er niet mee. Het programma tre-agrep toont je deze benaderende resultaten wel.

Tre-agrep heeft een wat vreemde naam. TRE is de naam van de softwarebibliotheek met BSD-licentie die reguliere expressies met fuzzy string matching implementeert. De agrep staat voor approximate grep. Tre-agrep ondersteunt de syntax van extended reguliere expressies, maar breidt deze uit met mogelijkheden om fouten te specificeren, zodat je ook teksten vindt die op typefouten na aan de reguliere expressie voldoen.

Fouten
TRE herkent drie types fouten: het invoegen van een extra teken, een teken dat ontbreekt, of een teken dat door een ander teken vervangen wordt. Je kunt in het programma tre-agrep de kost voor de drie types fouten instellen met de opties --insert-cost=GETAL, --delete-cost=GETAL respectievelijk --substitute-cost=GETAL. Met de optie -GETAL geef je het maximaal aantal fouten op dat in een resultaat mag voorkomen.

Als je bijvoorbeeld wil zoeken op het voorkomen van het woord TODO in allerlei broncodebestanden, terwijl je weet dat je dit woord regelmatig verkeerd typt, zoals TOOD of TOD, laat tre-agrep je deze resultaten wel zien met de volgende opdracht:


$ tre-agrep -n1 TODO *.c



Uitgebreide reguliere expressies
Hetzelfde principe kun je gebruiken om te zoeken in teksten waarin Brits en Amerikaans door elkaar gebruikt wordt, bijvoorbeeld color en colour, of optimize en optimise. TRE ondersteunt overigens ook een uitbreiding van reguliere expressies waarin je per deelexpressie kunt aanduiden hoeveel fouten er mogen voorkomen, bijvoorbeeld zoals in:


$ tre-agrep "(TODO){~1}.*(color){~2}" *.c



Aan deze test voldoen alle teksten die aan de reguliere expressie voldoen, met alle varianten van het woord TODO met één fout in en alle varianten van het woord color met maximum twee fouten in. De volledige regels voor deze uitgebreide syntax vind je op de website van TRE.