GREP in Linux begrijpen: gebruik en toepassingen
Grep is een compacte UNIX-tool die is ontworpen voor patroonzoeken. Oorspronkelijk geïntroduceerd in V6 UNIX, is het een hoofdbestanddeel geworden in verschillende UNIX-achtige besturingssystemen, waaronder Linux, macOS en BSD-varianten. In dit artikel verkennen we de fundamentele kenmerken van Grep en geven we praktische voorbeelden voor de toepassing ervan in alledaagse taken.
De basisprincipes van Grep begrijpen
De primaire functie van Grep is eenvoudig: het verwerkt invoer om overeenkomende tekstpatronen te identificeren en weer te geven. Dit hulpprogramma kan bijna elke bron van platte tekst onderzoeken, waardoor het direct door bestanden kan scannen of met uitvoer van andere opdrachten kan werken.
Om Grep te gebruiken, is een van de eenvoudigste opdrachten om te lezen van een tekstbestand. U kunt bijvoorbeeld de inhoud van weergeven sample.txt
met de volgende opdracht:
U kunt ook naar specifieke woorden zoeken in uw tekstbestanden:
Bovendien kan Grep worden gecombineerd met UNIX-pipes om meerdere opdrachten te verenigen in één enkele bewerking:
Voor meer inzicht in hoe pagers werken in Linux, kunt u onze cheat sheet over GNU Less raadplegen.
Zoeken naar bestanden in een directory
Een praktische toepassing van Grep is het lokaliseren van bestanden in een directory. U kunt de uitvoer van de opdracht direct naar Grep doorsturen ls
.
Met deze opdracht worden bijvoorbeeld alle JPEG-bestanden in uw map Downloads weergegeven door hun extensies te markeren:
U kunt de uitvoer uitbreiden ls
en ingewikkeldere patroonvergelijkingen uitvoeren. De volgende opdracht geeft bijvoorbeeld een lijst van alle bestanden in de huidige directory die kleiner zijn dan 1 MB:
Hoofdlettergevoeligheid negeren
Standaard zijn de meeste UNIX-achtige tools gevoelig voor hoofdletteronderscheidingen. Dit betekent dat de strings “Hello,””hello,””hEllo,”en “helLo”worden geïnterpreteerd als afzonderlijke vermeldingen.
Dit kan tekstzoekopdrachten compliceren, vooral als er verschillende gevallen van een woord aanwezig zijn. Om dit te beperken, kunt u Grep gebruiken met de -i
vlag gekoppeld aan de zoekterm:
Recursief zoeken
Grep heeft de mogelijkheid om meerdere bestanden of hele mappen tegelijk te doorzoeken. Dit is vooral handig als u een project met verschillende bestanden onderzoekt en u specifieke tekst in een map wilt vinden. Gebruik bijvoorbeeld de volgende opdracht om de term “MakeTechEasier” te vinden in de map “sample”:
Het is de moeite waard om op te merken dat het gebruik van de -r
vlag Grep dwingt om alle bestanden in uw opgegeven directory te onderzoeken, die mogelijk niet-tekstbestanden bevatten. Om deze situatie te voorkomen, gebruikt u -I
ook de vlag:
Bestanden met specifieke strings identificeren
Naast het weergeven waar een string in bestanden voorkomt, kan Grep een lijst genereren met bestanden die de tekst bevatten waarnaar u zoekt. Dit is handig als u wilt vaststellen of een bestand bepaalde inhoud heeft zonder elk gevonden exemplaar weer te geven.
Om dit te bereiken, gebruikt u Grep met de volgende vlaggen, -r
en -l
, samen met uw doelstring en de directory die u wilt doorzoeken:
Bovendien kunt u uw Grep-opdracht in een Bash-subshell inkapselen om meerdere zoekvoorwaarden af te dwingen. De volgende opdracht retourneert bijvoorbeeld bestanden die zowel “Hello” als “MakeTechEasier” bevatten in de map “sample”:
Onthullen van niet-overeenkomende resultaten
Naast standaard zoekopdrachten kan Grep ook resultaten opleveren die uw opgegeven criteria uitsluiten. Deze functionaliteit kan erg handig zijn als u fouten of onregelmatigheden in uw tekstinvoer wilt detecteren.
Om dit uit te voeren, gebruikt u de -v
vlag in combinatie met uw voorkeursopties. De volgende opdracht scant bijvoorbeeld recursief alle bestanden in de map “/etc/nginx” en retourneert alle regels die niet de tekenreeks “nginx” bevatten:
Zoeken naar woorden en regels
Het kan ook nuttig zijn om Grep te instrueren om te zoeken naar hele woorden of hele regels in plaats van naar een string die past bij een specifiek patroon. Deze aanpak is vooral handig bij het targeten van een reeks tekens die veel voorkomt in verschillende woorden. Bijvoorbeeld, zoeken naar de term “it” kan talloze valse positieven opleveren omdat het in veel andere woorden voorkomt.
Om dit probleem op te lossen, voert u Grep uit met de -w
vlag gevolgd door het gewenste woord:
In plaats van alle instanties met het zoekpatroon te retourneren, geeft Grep alleen het woord zelf weer. Dit geldt ook voor hele regels bij gebruik van de -x
vlag, waardoor het met name handig is voor het vinden van zinnen of exacte regels in configuratiebestanden.
Regelnummers opnemen in Grep-uitvoer
Regelnummers spelen een essentiële rol bij het debuggen van code en het beoordelen van documenten. Ze vereenvoudigen het proces van het bepalen van de locatie van een specifieke regel of functie, waardoor revisies aanzienlijk worden versneld.
Grep biedt functionaliteit om regelnummers in de uitvoer op te nemen. U kunt dit activeren door de opdracht uit te voeren met de -n
vlag samen met uw zoekterm:
In combinatie met UNIX-pipes kunt u de uitvoer van Grep verfijnen om alleen de regelnummers van uw zoekresultaten weer te geven. Deze aanpak is met name handig voor het verwerken van grote hoeveelheden tekst:
Uitgebreide Regex gebruiken met Grep
Grep gebruikt Basic Regular Expressions (BRE) als primaire metatekens voor het matchen van tekst. Hoewel dit functioneel is voor verschillende taken, kunnen gebruikers het beperkend vinden, vooral bij het onderzoeken van patroongroepen.
Om de mogelijkheden uit te breiden, nemen veel Grep-implementaties de -E
vlag op om het parsen van Extended Regular Expressions (ERE) mogelijk te maken. De onderstaande opdracht vereist bijvoorbeeld de -E
vlag:
Daarnaast heeft Grep een speciale modus die regex-functionaliteiten volledig elimineert. Om deze te activeren, voert u de opdracht uit met de -F
vlag gevolgd door een eenvoudige string:
Omringende lijnen opnemen in Grep-uitvoer
De kracht van Grep ligt in het onthullen waar tekst in uw invoer of bestanden verschijnt. Het weergeven van de exacte locatie alleen is echter mogelijk niet voldoende bij het oplossen van problemen. Context rondom een string, zoals die in crashlogs, kan vaak essentiële inzichten bieden.
Om extra context af te drukken, kunt u Grep uitvoeren met de -C
vlag gecombineerd met het aantal regels dat u voor en na uw zoekresultaat wilt weergeven. Om bijvoorbeeld vijf regels rond uw doelstring weer te geven, gebruikt u de volgende opdracht:
U kunt uw resultaten ook aanpassen door selectief alleen de voorgaande of volgende regels af te drukken met behulp van de -B
en -A
-vlaggen. De onderstaande opdracht geeft bijvoorbeeld de tien regels weer die na uw zoekterm komen:
Nu u bent uitgerust met de basiskennis van Grep en hoe u het kunt gebruiken voor algemene taken, bent u klaar om dieper in de opdrachtregel en het bredere UNIX-ecosysteem te duiken. Ontdek verder door te leren hoe u sed in Linux kunt gebruiken voor nog krachtigere tekstverwerking.
Afbeelding tegoed: Alejandro Escamilla via Unsplash . Alle aanpassingen en screenshots door Ramces Red.
Geef een reactie