grep: Tekst bewerken via de commandoregel
grep zoekt en filtert. Het bewerkt niets. Dit artikel legt uit wat grep wél doet, hoe u het combineert met andere commando's om bestanden te wijzigen, en waarom die combinatie u meer controle geeft dan een directe bewerking ooit zou doen.
VEREISTEN
- Een Linux- of Unix-omgeving met grep geïnstalleerd (grep 3.11 of nieuwer).
- Toegang tot een terminal.
- Basiskennis van de commandoregel: navigeren, bestanden bekijken.
- Optioneel: een Nederlandstalige manpage, beschikbaar via
man grepin Debian trixie.
STAPPEN
1. Zoek een patroon in een bestand.
De eenvoudigste vorm: grep "fout" logfile.txt toont alle regels in logfile.txt die het woord "fout" bevatten. Grep leest het bestand, filtert de regels, en print ze naar de terminal. Het origineel blijft onaangeraakt.
grep "fout" logfile.txt
Dit is een read-only operatie. U kunt hiermee niets kapot maken, wat het een veilige eerste stap maakt in elke analyse.
2. Leid de output om naar een nieuw bestand.
grep print naar stdout. Met > vangt u die output op en schrijft u die naar een bestand. Zo maakt u een gefilterde kopie zonder het origineel te wijzigen.
grep "fout" logfile.txt > fouten.txt
Let op: > overschrijft een bestaand bestand. Wilt u toevoegen aan een bestaand bestand, gebruik dan >>. Het origineel blijft intact, wat deze aanpak geschikt maakt voor het veilig splitsen van logs.
3. Combineer grep met pipes.
De echte kracht zit in de pipe (|). Die stuurt de output van het ene commando als invoer naar het volgende. Zo filtert u niet alleen bestanden, maar ook de output van andere commando's.
sudo dmesg | grep net
Dit commando toont alleen kernelberichten die het woord "net" bevatten. Bij netwerkproblemen ziet u direct de relevante regels in plaats van de volledige dmesg-output. Dit werkt met elk commando dat naar stdout schrijft: ps, ss, journalctl, noem maar op.
4. Gebruik reguliere expressies voor preciezere patronen.
Grep accepteert reguliere expressies. Waar grep "fout" alleen het exacte woord vindt, zoekt grep "^fout" naar regels die met "fout" beginnen. Het dakje (^) is een anker dat het begin van een regel markeert.
grep "^fout" logfile.txt
Reguliere expressies maken grep tot een precisie-instrument. U kunt ermee zoeken op woordgrenzen, herhalingen, of karakterklassen. De syntax is uitgebreid, maar de basis is in een middag te leren.
5. Toon alleen het aantal overeenkomsten.
Soms wilt u niet weten wélke regels matchen, maar hoeveel het er zijn. De -c vlag telt ze.
grep -c "fout" logfile.txt
Dit is sneller dan tellen in een editor en geschikt voor scripting. Combineer het met een pipe om te tellen in de output van een ander commando.
6. Zoek recursief in een directorystructuur.
Met -r scant grep alle bestanden in een directory en zijn subdirectories. Dit is onmisbaar bij het doorzoeken van configuratiemappen of broncode.
grep -r "timeout" /etc/
Grep toont per overeenkomst de bestandsnaam en de regel. Let op: -r volgt geen symlinks. Gebruik -R als u die ook wilt volgen. Dit kost meer tijd, maar is grondiger.
7. Toon context rond een overeenkomst.
Een losse regel zegt vaak niet genoeg. Met -C 3 toont grep drie regels vóór en na elke overeenkomst. Zo ziet u de context van een foutmelding zonder het hele bestand te openen.
grep -C 3 "fout" logfile.txt
Dit is standaard in elke loganalyse. Wilt u alleen regels erna (-A) of ervoor (-B), dan kunt u die vlaggen apart gebruiken.
8. Wijzig een bestand via een omweg.
Grep zelf kan geen bestand wijzigen. Maar door de gefilterde output naar een tijdelijk bestand te schrijven en dat terug te kopiëren, bereikt u hetzelfde effect.
grep -v "debug" logfile.txt > tmp.txt && mv tmp.txt logfile.txt
De -v vlag keert de match om: grep toont alles behalve regels met "debug". Het resultaat schrijft u naar tmp.txt, en mv vervangt het origineel. Dit is een handmatige implementatie van wat sed in één stap doet — voor eenmalige bewerkingen is het prima. Voor herhaalde bewerkingen is sed sneller en minder foutgevoelig.
VERIFICATIE
Controleer of grep correct werkt:
grep --version
Dit toont de versie, bijvoorbeeld grep (GNU grep) 3.11. Om te controleren of een filter correct is toegepast:
grep -c "debug" logfile.txt
Als dit 0 toont na stap 8, zijn alle regels met "debug" verwijderd. U kunt ook diff gebruiken om het origineel en het resultaat te vergelijken:
diff logfile.txt tmp.txt
Geen output betekent dat de bestanden identiek zijn — of dat grep niets heeft gevonden.
VEELGESTELDE PROBLEMEN
1. Grep vindt niks, maar de tekst staat er wel.
Controleer of het patroon geen reguliere expressie is die u letterlijk bedoelde. De punt (.) matcht elk karakter, en het dakje (^) markeert het begin van een regel. Gebruik grep -F om het patroon letterlijk te behandelen, of escape de speciale karakters met een backslash.
2. Grep klaagt over "Binary file matches".
Grep herkent binaire bestanden en weigert de output te tonen. Gebruik grep -a om het bestand als tekst te behandelen, of grep -I om binaire bestanden over te slaan. De eerste optie is riskant bij grote binaire bestanden — de output kan onleesbaar zijn.
3. De output van grep is te groot om te lezen.
Leid de output naar less om te bladeren, of naar een bestand om later te analyseren. grep "fout" logfile.txt | less is de snelste oplossing voor lange outputs.
---
Grep is geen tekstverwerker. Het is een filter. En filters zijn het waardevolst wanneer u ze combineert: met pipes, met omleiding, met andere tools. De geschiedenis helpt hierbij niet — dat grep in de jaren zestig uit de ed-editor is voortgekomen, verklaart de naam g/re/p, maar niet waarom u het vandaag zou gebruiken. Wat wel telt: grep zit op elke server, in elke container, op elk netwerkapparaat. Het is onderdeel van de POSIX-standaard en aanwezig op vrijwel elke Linux-installatie.
Wie grep beheerst, doorzoekt logs in seconden die een editor in minuten kost. Wie grep combineert met sed of awk, bewerkt bestanden zonder ze te openen. De vraag is niet of u grep nodig hebt. De vraag is hoe lang u zonder blijft werken.