Introductie
Eén van de handigste tools in de toolbox van Linux gebruikers is grep. In dit artikel leer je wat grep is en waarvoor je het kunt gebruiken in de Linux commando regel en in de bash scripting. Aan het einde van dit artikel ben je vertrouwd met het gebruik van grep in eenvoudige en complexe pipe commando’s.
Vereisten
Grep was eén van de eerste ontwikkelde Unix-tools en is beschikbaar op alle Linux-distributies/ Mac OS X versies. Hoewel Windows geen ingebouwde grep heeft, kun je wel een versie voor Windows downloaden. Zo kun je ook de Powershell-commando select-string gebruiken die bijna vergelijkbaar is.
Stap 1 – Grep gebruiken om een bestand te zoeken
De meest eenvoudige stap is controleren of een bestand een bepaalde string bevat. We zullen beginnen met het bekijken van het “bashrc” bestand, dat aanwezig is op zowel Mac als Linux machines. We zullen controleren of het bestand het woord “overwrite” bevat (in de standaardversie is dit wel te vinden). Om het bestand te controleren voer je het onderstaande commando uit:
grep overwrite ~/.bashrc
De commandoregel zal dit woord tonen overwrite
.
Voor meer informatie kunt je de -n flag gebruiken om het regelnummer op te nemen dat de overeenkomst bevat. Dit kan handig zijn voor grotere bestanden of als je het bestand later wilt bewerken. Grep zal standaard de gedeeltelijke overeenkomsten tonen voor jouw reeks. Als jouw reeks bijvoorbeeld spa
is dan zal grep jouw de resultaten laten zien voor span
of spark
Gebruik de -w flag om de resultaten van volledige woorden te beperken.
Stap 2 – Grep gebruiken om meerdere bestanden te zoeken
Vaak willen we in meerdere bestanden zoeken om te zien waar een bepaalde reeks zich bevindt. Stel dat je een directory hebt die meeting-notes heet waar je al jouw bestanden bewaart van vergaderingen, de bestanden hetenmeeting-january-2019.txt
, meeting february-2018.txt
etc. Je weet dan niet welk bestand de informatie bevat over de aankoop van een VPN. Je zou dan elk bestand kunnen openen en lezen, maar je kunt ook grep gebruiken om de bestanden te scannen en te zoeken naar het woord VPN
:
grep -i vpn meeting-notes/*
Grep zal een lijst afdrukken van alle bestandsnamen die het woord VPN bevat, samen met de regel die is gebruikt. Omdat de zoekfunctie gevoelig kan zijn moet je goed opletten hoe wij de -i flag gebruiken. De zoekopdrachten voor VPN
vpn
of andere hoofdlettergevoelige woorden kunnen daardoor niet weergegeven worden.
Stel dat je jouw notities hebt opgeslagen in verschillende submappen van de meeting-notes-directory en dat je bijvoorbeeld meeting-notities / 2018 directory, meeting-notes / 2019 directory, etc hebt, ook dit kan Grep aan! Je kunt hiervoor de -R flag (of -r, or –recursive, all work) gebruiken. Grep toont dan ook de resultaten van de submappen.
Soms ben je alleen geïnteresseerd in de namen van de bestanden die een overeenkomst hebben. Je kunt grep laten weten dat je de inhoud van de bestanden niet wilt zien maar alleen de bestandsnamen zelf, door de l-flag (of de volledige vlag-met-matches) te gebruiken. Dan zal de output alleen de bestandsnamen laten zien en niet de inhoud.
Stap 3 – Grep Pipe-commando
Een van de meest handige commando’s voor grep is de pipe-commando. Veel Unix-commando’s leveren veel meer output dan je nodig hebt, en dit maakt het moeilijk om de informatie te vinden die je nodig hebt. Grep kan die informatie filteren en alleen de output laten zien waarin je geïnteresseerd bent.
Stel dat je een webpagina host met nginx op een speciale server. Je wilt de realtime serverlogboeken bekijken om te zien of iemand de webpagina bezoekt voor een wedstrijd die je hebt gemaakt. Een manier om dit te doen is om grep herhaaldelijk in het serverlogbestand uit te voeren zoals we in stap 1 hebben behandeld, maar dat is inefficiënt. Je moet namelijk steeds hetzelfde commando blijven uitvoeren.
De beste manier om dit te doen is met een pipe commando, een reeks of commando’s die samen worden uitgevoerd. Je kunt dit commando uitvoeren tail
om de logboeken in realtime te volgen en vervolgens in grep te pipen om de realtime logboeken naar de gewenste output te filteren.
tail -f /var/log/nginx/access.log | grep contest
Deze eenvoudige pipe commando laat de kracht van grep zien bij het werken met andere programma’s. Vaak kun je complexe pipe commando’s maken en grep daarachter plakken en vervolgens alleen de output die je nodig hebt knippen.
Hier gebruiken we tail met de -flag om het toegangslogboek in realtime te volgen en gebruiken we grep om alleen de output weer te geven die we willen zien.
Een veel voorkomende truc met grep is om het aantal overeenkomsten in een bestand te tellen met behulp van de wc (wordcount) programma. Met -l
flag kun je de output regels tellen in grep. Als je bijvoorbeeld wilt tellen hoe vaak het woord
python
voorkomt in het requirements.txt
bestand dan kun je dit commando uitvoeren:
grep python requirements.txt | wc -l
Step 4 – Using RegExs with grep
Een laatste manier om jouw grep-gebruik te verbeteren, is door regexes (reguliere expressies) op te nemen. Feitelijk interpreteert grep al jouw input standaard als regex, als je een reeks zoekt, dan is de regex en reeks identiek.
Dit kan handig zijn als je zoekt naar meerdere termen. Een regex om de termen “inside” and “outside” te combineren zou inside|outside zijn. Het zou geweldig zijn als we dat gewoon in grep konden opnemen als onze zoekterm, maar het pijpsymbool (|) is een speciaal teken in bash en dat zou ons commando kapot maken. De oplossing? Eerst moeten we aanhalingstekens toevoegen rond onze zoekterm.
grep "inside|outside" myfile.txt
Je kunt dit uitbreiden naar veel meer termen met behulp van pipe or
. Aanhalingstekens zijn ook handig. Onthoud dat je op een opdrachtregel staat, dus als je zoekterm spaties of andere speciale tekens bevat (zoals! Of *), moet je er citaten omheen zetten om grep te laten werken.
Conclusion
In dit artikel hebben we gekeken naar 3 handige en complexe voorbeelden van grep acties. Je kunt grep voor alles gebruiken, van bestanden bekijken tot het filteren van lange pipe commando’s. Grep is extreem krachtig en snel. Daarnaast is het een geweldig hulpmiddel om te gebruiken.
Wil je meer leren over grep dan kun je dit commando uitvoeren man grep
en de documenten nalezen.
Geef een reactie