Er is een klassiek stukje computerwijsheid waarin staat: "Als je een probleem hebt en besluit het op te lossen met reguliere expressies, dan heb je nu twee problemen." Dit komt natuurlijk door de perceptie dat reguliere expressies een ingewikkeld probleem zijn. mix van magische personages en Voodoo. Reguliere expressies kunnen u snel en gemakkelijk elegante en beknopte programmalogica opleveren, maar alleen als u hebt geleerd te begrijpen hoe ze werken en waarom. Zowat elk Linux- of Mac-systeem wordt geleverd met een krachtige regex-tool- oproepgreep en het leren van grep is een essentiële taak voor elke krachtige gebruiker of systeembeheerder. Vandaag verkennen we wat je met grep kunt doen en hoe het een van de krachtigste tools in je geekarsenaal kan zijn.

Hoe het werkt

Kortom, het is de taak van grep om door een invoerblok heen te zoeken. Dat is vrij vaag, dus het is het best te beschrijven met een voorbeeld. Laten we zeggen dat je een tekstbestand hebt met de naam distros.txt met een lijst van Linux-distributies, zoals die hieronder.

Debian - stabiele server distributie
Ubuntu - Desktop distro oorspronkelijk gebaseerd op Debian
Kubuntu - Gebruikt KDE-bureaublad in plaats van Gnome
Fedora - Voortzetting van het gratis Red Hat-desktopsysteem
Gentoo - Een snel, brongebaseerd Linux-systeem voor pro-gebruikers
SuSE - Commerciële Linux eigendom van Novell
Mint - Ubuntu-afgeleide distro met extra beperkte software

Grep kan worden gebruikt om de tekst te lezen en te filteren om alleen de gewenste delen weer te geven. Als u alleen de regels wilt zien die het woord "Ubuntu" bevatten, voert u de volgende opdracht uit:

 grep Ubuntu distros.txt 

(Uw versie van grep kan al dan niet kleurmarkering bevatten zoals in het bovenstaande voorbeeld)

Hoofdlettergevoeligheid

U hebt misschien gemerkt dat onze laatste zoekopdracht Kubuntu niet heeft teruggestuurd. Tenzij anders wordt vermeld, gaat Grep ervan uit dat je je expressie hebt ingevoerd precies zoals jij het wilde, en dit geldt voor hoofdletters en kleine letters. Als u zoekt naar "ubuntu" maar uw tekstbestand bevat "Ubuntu", zal uw zoekopdracht niets vinden. Gebruik de schakeloptie -i om in te stellen dat uw zoekvraag niet hoofdlettergevoelig is

 grep -i ubuntu distros.txt 

Hele wereld

Bij de vorige zoekopdracht zijn alle hoofdvarianten van het woord "Ubuntu" opgenomen. Het bevat Kubuntu omdat het het woord bevat waarnaar je hebt gezocht. Misschien wil je alleen de standaardversie opnemen, niet Kubuntu of Edubuntu, enz. Als dat het geval is, kun je vertellen dat grep het hele woord moet matchen door alleen de optie -w te gebruiken.

 grep -i ubuntu distros.txt 

Uitsluiting

Net zoals je grep kunt gebruiken om alleen overeenkomende vermeldingen weer te geven, kun je het ook gebruiken om alles behalve de overeenkomende vermeldingen weer te geven. Om onze eerdere zoekopdrachten uit te breiden, kunnen we nu de optie -v gebruiken om onze resultaten om te keren en alleen de regels weer te geven die niet overeenkomen.

wildcards

Grep heeft volledige ondersteuning voor jokertekens bij het matchen van patronen. Bij het gebruik van jokertekens en andere speciale tekens, moet je ervoor zorgen dat je zoekpatroon tussen aanhalingstekens staat, dus probeert de Linux-shell ze niet te interpreteren voordat grep kan. Gemeenschappelijke jokertekens bevatten * voor groepen tekens en. om een ​​enkel onbekend personage te vertegenwoordigen.

ranges

Als de jokertekens een beetje te breed voor u zijn, kunt u afzonderlijke tekens of een bereik opgeven dat u in uw zoekopdracht wilt opnemen. Karakters tussen vierkante haken worden opgenomen in uw zoekpatroon. Bijvoorbeeld, als u een bestand had met een lijst zoals

 Item 1 - appelen Item 2 - bananen Item 3 - kokosnoten Artikel 4 - perziken Artikel 5 - Druiven Artikel 6 - Abrikoos 

Je kunt een bepaald bereik kiezen door iets als te gebruiken

 grep "Item [2-4]" items.txt 

Grep is een enorm krachtige tool, en het grondig leren ervan kan op allerlei manieren vruchten afwerpen. Het begrijpen van grep maakt het ook veel eenvoudiger om door te gaan naar andere krachtige consoletools zoals sed en awk. Tussen deze drie tools kan een verbazingwekkende hoeveelheid console- en scriptmagie worden gedaan met veel minder moeite dan mogelijk lijkt. Als je een fan van grep bent, of als je andere tools zoals sed en awk hier wilt zien, laat dan een bericht achter in de comments.