Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/03489.jsonl.gz/261

Mo, 16. Januar 2023, Ralf Hersel
Viele der basalen Befehle, die wir im GNU/Linux-Terminal verwenden, haben eine lange Geschichte und stammen aus den UNIX-Zeiten der frühen 70er-Jahre. So auch das Kommando grep, mit dem sich nach Texten in Dateien suchen lässt. Neulich stiess ich auf ein Interview mit Professor Brian Kernighan der als Mitentwickler der Programmiersprache C bekannt ist.
Die vier Buchstaben des Befehls grep stehen für "global regular expression print" und sind eng verbunden mit dem frühen Texteditor ed und dem geringen Arbeitsspeicher von Computern der 70er-Jahre. Ausgangspunkt war der Wunsch, die Federalist Papers einer Textanalyse zu unterziehen, um deren Autoren bestimmen zu können. Diese 85 Dokumente aus dem 18. Jahrhundert wurden in New Yorker Zeitungen veröffentlicht, um die Bevölkerung des Staats zu bewegen, der noch nicht ratifizierten föderalen Verfassung der Vereinigten Staaten von Amerika zuzustimmen.
Der von Ken Thompson programmierte Texteditor ed unterstützte zwar reguläre Ausdrücke, konnte aber nicht für grosse Textmengen verwendet werden, wie es für die Untersuchung der Federalist Papers notwendig war. Das Kommando im Zeilen-basierten Editor ed, um alle Zeilen auszugeben, die einem bestimmten Muster entsprechen, lautet: g/re/p. Eine globale Suche (über einzelne Zeilen hinweg) mittels eines regulären Ausdrucks und anschliessender Ausgabe der passenden Zeilen.
Aufgrund es geringen Arbeitsspeichers konnten die Dokumente jedoch nicht vollständig in ed geladen werden. Daher fragte Douglas McIlroy Ken Thompson um Hilfe, um die Analysearbeit von Lee E. McMahon zu ermöglichen. Thompson hatte bereits ein Suchwerkzeug namens s (search) geschrieben, was er nun innerhalb einer Stunde anpasste. Das Ergebnis war das eigenständige Werkzeug grep, welches seinem Namen dem Befehl g/re/p aus dem Editor ed verdankt.
Brian Kernighan erzählt die Geschichte im Video viel schöner, als ich das hier wiedergeben kann:
Quellen: