Sinds ik een half jaar geleden dagelijks met computercode ben gaan experimenteren, kom ik termen en begrippen tegen die ik heus wel eens had gehoord maar nooit echt had begrepen.
grep is er één van, een voor programmeurs onmisbare Unix-tool waarvan ik eindelijk snap waarom ze er zo over praten.
Eerder schreef ik in IP Magazine, hét vakblad voor informatieprofessionals, over het woord parsen, nog zo'n term die bij informatiespecialisten grotendeels onbekend is terwijl ze er veel baat bij zouden hebben. Grep is ook zo'n term die grote onbekendheid geniet bij informatieprofessionals die er juist erg veel baat bij zouden hebben.
Bibliothecarissen, archivarissen, recordsmanagers en kennismanagers, mensen wiens beroep het is om informatie te ontsluiten, hebben zelden gehoord van het meest elementaire ontsluitingsgereedschap voor informatie dat er bestaat. Het bestaat al sinds 1973, het werkt op vrijwel elke computer ter wereld, en doet één ding briljant en ook nog eens duizelingwekkend snel: patronen vinden in bergen tekst, ook als die berg miljoenen pagina's A4 bevat.
Er bestaat zelfs een internationale organisatie, Library Carpentry, die workshops geeft aan bibliothecarissen en archivarissen over grep. Maar de meeste mensen die professioneel met informatie bezig zijn, zullen hier nog nooit van gehoord hebben. Het is de hoogste tijd om daar wat aan te doen!
De ontstaansgeschiedenis van deze krachtige tool
Begin jaren 70 hadden ze bij Bell Labs, een van de belangrijkste technologische researchlabs ter wereld, een tekstverwerker gemaakt die ed heette. Daarmee kon je regels aanpassen. D`e interface was niet grafisch, maar wel heel precies en daarom geliefd.
Grep is dus geen afkorting maar ís het commando zelf. De naam zit er letterlijk in: g/re/p. In deze editor kon je typen:
g/re/p
De g stond voor global: pas dit toe op alle regels. De /re/ was een reguliere expressie, het patroon waar je naar zocht. De p stond voor print: toon de regels die matchen op het scherm. Wat deze combinatie doet: het doorloopt het hele bestand, het maakt vervolgens het gezochte patroon zichtbaar en laat het zien op het scherm.
Op een dag vroeg programmeur Doug McIlroy aan zijn collega Ken Thompson of hij ook tekst op patronen kon doorzoeken zonder dat je de editor hoefde te openen. Thompson zei dat hij er een nachtje over wilde slapen. Hij zei er alleen niet bij dat het programma al lang bestond. Hij had het al maanden privé gebruikt, en perfectioneerde die avond de tool voor algemeen gebruik en loste nog wat bugs op. De volgende ochtend deed hij net alsof hij het 's nachts had gemaakt. Dat was althans de versie van Thompson een halve eeuw later.
De onbenutte rekenkracht van onze computer
Grep is razendsnel omdat het zo min mogelijk leest, een beetje zoals ik zelf ook lees. Woorden als de, het en een sla ik gewoon over, omdat die weinig toe voegen aan wat ik wil weten:
GNU grep is fast because it AVOIDS LOOKING AT EVERY INPUT BYTE.
Grep kijkt niet naar elke letter afzonderlijk, maar springt grote stukken tekst over zodra het weet dat er toch geen match zit. Hoe langer het woord waarnaar je zoekt, hoe groter de sprongen. Deze aanpak zorgt ervoor dat de computer zo min mogelijk hoeft te lezen, wat de sleutel is achter de indrukwekkende snelheid.
The key to making programs fast is to make them do practically nothing.
Een miljoen documenten van gemiddeld drie A4 beslaat ongeveer 8 gigabyte tekst en 1,3 miljard woorden. Grep doorzoekt die berg in seconden, op welke machine dan ook. Een menselijke lezer zou er, zonder pauze, 80 tot 130 jaar over doen. De meeste mensen zijn zich volstrekt niet bewust van deze verborgen superkracht van hun eigen computer.
Waarom elke archiefspecialist Unix zou moeten kennen
Stel je voor, je bent al twintig jaar archivaris. Je hebt vele classificatiesystemen gebouwd, trefwoordenlijsten bijgehouden, en duizenden keren metadata ingevoerd, veld voor veld. Je weet precies waar alles staat, of in ieder geval: je weet waar het zou moeten staan als iedereen zich aan de afspraken had gehouden. En dan hoor je van een collega bij het koffieapparaat dat er een tool bestaat die in een paar seconden door een miljoen documenten zoekt zonder ook maar één van jouw classificaties nodig te hebben. Dat geeft te denken, toch?
Daarmee komt er een vraag naar boven die er eigenlijk al een tijdje lag, maar nooit hardop werd gesteld.
Die collega stelde op zich geen vraag. Maar jij zit er de rest van de dag mee: als een tool van vijftig jaar oud in seconden doet wat jij in twintig jaar hebt opgebouwd, wat zegt dat dan over die twintig jaar noeste arbeid?
Full-text search bestaat al vijftig jaar, maar grep doet dat op de meest fundamentele manier: je beschrijft gewoon een patroon, doorzoekt een ongekend grote berg tekst zonder dat je verdere infrastructuur nodig hebt. Als je je vak hebt opgebouwd rond het vooraf ordenen van informatie, is dat ongemakkelijk en vreemd ogend gereedschap.
Het luikje naar de machinekamer van je computer
Op elke Mac en de meeste Windows-computers bestaat ergens een luikje naar de machinekamer. De meeste mensen weten dat het er is, maar openen het nooit. Wie het wel opent, vindt er gereedschap dat al decennia klaarligt, waaronder grep.
Op een Mac is dat geen toeval. macOS is onder de motorkap een Unix-systeem, en grep zit daar gewoon standaard bij in. Windows heeft een andere geschiedenis: het heeft geen Unix-fundering, maar inmiddels wel toegang tot grep. Via Git bijvoorbeeld, een veelgebruikt programma voor versiebeheer van bestanden, dat wie het installeert automatisch een hele Unix-omgeving meebrengt, inclusief grep, zonder dat het ergens wordt aangekondigd. Of via de Linux-laag die Microsoft sinds 2016 in Windows heeft ingebouwd.
Grep heeft ook een vriendje: sed, de Stream Editor, een jaar later geboren op dezelfde plek in het Bell Labs-laboratorium.
Stel je hebt een archief van een miljoen documenten, waaronder jaren aan verslagen van management-overleggen. In seconden zijn alle bestanden gevonden die over die vergaderingen gaan. Elk gevonden bestand krijgt automatisch een extra regel: selectielijst 1, bewaartermijn 10 jaar, verwijderdatum 2031. Daarna kun je met een simpele zoekopdracht alles ophalen wat nu vernietigd moet worden. Ik begrijp van archiefwetspecialisten waar ik regelmatig mee praat dat dit nu een hels karwei is, en duur en tijdrovend. Terwijl dat helemaal. niet zo hoeft te zijn.
De AI die ik dagelijks inzet om code te schrijven en te fixen grijpt naar beide zonder aarzelen, als vanzelfsprekend onderdeel van hoe het met bestanden werkt en patronen opspoort.
De noodzakelijke paradigmaverschuiving in 50 jaar archiefwerk
In 1962 beschreef filosoof Thomas Kuhn het fenomeen paradigmaverschuiving. Dat is geen verbetering binnen een bestaand denkkader, maar een breuk met het hele kader zelf. Het doorbreekt vakgebieden, silo's en belemmerende overtuigingen.
Het klassieke archiefparadigma ging uit van de mens als zoeker. Orden alles vooraf, classificeer het, en dan kunnen mensen het later sneller terugvinden. Dit paradigma houdt echter geen rekening met het fenomeen rekenkracht, schaal en snelheid van computers.
Daarom moet in het nieuwe paradigma van de archiefwereld de machine centraal staan. Niet AI, maar de computer zelf. Orden de informatie zo dat machines kunnen redeneren. Dat is niet dezelfde vraag op een andere manier gesteld. Het is een fundamenteel ander uitgangspunt bij het begin van elk ordeningsproces.
Historisch gezien was het logisch om zo te archiveren, want computers werden er niet voor ingezet. Maar de afgelopen dertig jaar is de rekenkracht van de computer genegeerd terwijl de informatieberg exponentieel groeide, en elk nieuw archiefsysteem dat in die periode is gebouwd draagt hetzelfde probleem mee.
Precies daar gaat het mis. Een halve eeuw lang is informatie geordend in vormen die geen machine kan lezen. Grep kan helemaal niets met een ingescand document of een pdf. De tekst zit er wel in, maar grep kan er niet bij. En dat in het huidige informatietijdperk. Een trefwoordenlijst die alleen in het hoofd van de maker leeft, bestaat voor geen enkele machine. Om zo'n bestand te kunnen doorzoeken heb je eerst een tussenlaag nodig die de tekst eruit trekt, en die tussenlaag ontbreekt in de meeste archieven.
De blinde vlek in de wereld van IT en in de wereld van informatieprofessionals is dat het bestandsformaat alles uitmaakt voor het überhaupt kunnen gebruiken van het krachtigste informatiegereedschap waar de computer over beschikt.
Het luikje zit op je computer. Het enige wat je hoeft te doen is het openen. Open de Terminal op je Mac of PowerShell op Windows en typ:
grep -r "managementoverleg" ~/Documents
Bij de Pilot Informatieautonomie leren we medewerkers van overheidsorganisaties hoe je met dit soort zaken om kunt gaan en de lessen en inzichten snel kunt toepassen.
Bronnen: Mike Haertel, "why GNU grep is fast" (freebsd-current mailinglijst, 21 augustus 2010). Anekdote over Thompson en McIlroy: Brian Kernighan interviewt Ken Thompson, VCF East 2019.