Grep-commando in Linux/UNIX

Wat is Grep

Grep, afgekort voor “global regular expression print”, is een commando dat wordt gebruikt voor het zoeken en matchen van tekstpatronen in bestanden met reguliere expressies. Bovendien is het commando standaard geïnstalleerd in elke Linux-distributie. In deze handleiding zullen we kijken naar de meest voorkomende toepassingen van het grep-commando, samen met populaire gebruiksscenario’s.

Grep-commando in Linux

Met het grep-commando kan een reguliere expressie of een tekenreeks worden gezocht in een tekstbestand. Om dit te demonstreren, laten we een tekstbestand welcome.txt maken en er wat inhoud aan toevoegen zoals getoond.

Welcome to Linux !
Linux is a free and opensource Operating system that is mostly used by
developers and in production servers for hosting crucial components such as web
and database servers. Linux has also made a name for itself in PCs.
Beginners looking to experiment with Linux can get started with friendlier linux
distributions such as Ubuntu, Mint, Fedora and Elementary OS.

Goed! Nu zijn we klaar om enkele grep-commando’s uit te voeren en de uitvoer te manipuleren om de gewenste resultaten te krijgen. Voer de onderstaande opdracht uit om naar een tekenreeks in een bestand te zoeken Syntax

$ grep "string" file name

OF

$ filename grep "string"

Voorbeeld:

$ grep "Linux" welcome.txt

Uitvoer Zoals je kunt zien, heeft grep niet alleen de tekenreeks “Linux” gezocht en gematcht, maar heeft het ook de regels afgedrukt waarin de tekenreeks voorkomt. Als het bestand zich in een andere bestandspad bevindt, zorg er dan voor dat je het bestandspad specificeert zoals hieronder weergegeven.

$ grep "string" /path/to/file

Kleur geven aan Grep-resultaten met de –color-optie

Als je werkt op een systeem dat de zoekreeks of het patroon niet in een andere kleur weergeeft dan de rest van de tekst, gebruik dan de --color-optie om je resultaten te laten opvallen. Voorbeeld

$ grep --color "free and opensource" welcome.txt 

Uitvoer

Zoeken naar een teken recursief in alle mappen

Als je een teken wilt zoeken in je huidige map en alle andere submappen, gebruik dan de -r-vlag zoals getoond

$ grep -r "string-name" *

Bijvoorbeeld

$ grep -r "linux" *

Uitvoer

Hoofdlettergevoeligheid negeren

In het bovenstaande voorbeeld gaven onze zoekresultaten ons wat we wilden omdat de string “Linux” in hoofdletters was gespecificeerd en ook in hoofdletters in het bestand voorkomt. Laten we nu proberen te zoeken naar de string in kleine letters.

$ grep "linux" file name

Niets uit de uitvoer, toch? Dit komt omdat grepping de string “linux” niet kon vinden en matchen omdat de eerste letter in kleine letters is. Om hoofdlettergevoeligheid te negeren, gebruik de -i vlag en voer het onderstaande commando uit

$ grep -i "linux" welcome.txt

Uitvoer Geweldig, nietwaar? De -i wordt normaal gesproken gebruikt om strings weer te geven ongeacht hun hoofdlettergevoeligheid.

Tel de regels waarin strings overeenkomen met de -c optie

Om het totale aantal regels te tellen waarin het stringpatroon voorkomt of verblijft, voer het onderstaande commando uit

$ grep -c "Linux" welcome.txt

Uitvoer

Grep gebruiken om de uitvoer om te keren

Om de uitvoer van Grep om te keren, gebruik de -v vlag. De -v optie geeft grep de opdracht om alle regels af te drukken die de expressie niet bevatten of overeenkomen. De -v optie vertelt grep om zijn uitvoer om te keren, wat betekent dat in plaats van overeenkomende regels af te drukken, het het tegenovergestelde doet en alle regels afdrukt die niet overeenkomen met de expressie. Terug naar ons bestand, laten we de regelnummers weergeven zoals getoond. Druk op ESC in de Vim-editor, typ een dubbele punt gevolgd door

 set nu

en druk vervolgens op Enter. Uitvoer Nu, om de regels weer te geven die de string “Linux” niet bevatten, voer

$ grep -v "Linux" welcome.txt

Uitvoer Zoals je kunt zien, heeft grep de regels weergegeven die de zoekpatroon niet bevatten.

Nummer de regels die het zoekpatroon bevatten met de -n optie

Om de regels waar het stringpatroon overeenkomt te nummeren, gebruik de -n optie zoals getoond

$ grep -n "Linux" welcome.txt

Uitvoer

Zoek naar het exact overeenkomende woord met de -w optie

Het doorgeven van de -w-vlag zal zoeken naar de regel met het exact overeenkomende woord, zoals getoond

$ grep -w "opensource" welcome.txt

Output Echter, als je probeert

$ grep -w "open" welcome.txt

zullen er GEEN resultaten worden geretourneerd omdat we niet zoeken naar een patroon maar naar een exact woord!

Het gebruik van pipes met grep

De grep-opdracht kan samen met pipes worden gebruikt om een onderscheidende output te krijgen. Bijvoorbeeld, als je wilt weten of een bepaald pakket is geïnstalleerd op een Ubuntu-systeem, voer dan uit

$ dpkg -L | grep "package-name"

Bijvoorbeeld, om erachter te komen of OpenSSH is geïnstalleerd op je systeem, leidt de dpkg -l-opdracht naar grep zoals getoond

$ dpkg -L | grep -i "openssh"

Output

Weergeven van het aantal regels voor of na een zoekpatroon met behulp van pipes

U kunt de -A of -B gebruiken om het aantal regels weer te geven dat voorafgaat aan of volgt op de zoekreeks. De -A-vlag geeft de regels weer die na de zoekreeks komen en -B drukt de uitvoer af die voor de zoekreeks verschijnt. Bijvoorbeeld

$ ifconfig | grep -A 4 ens3

Deze opdracht geeft de regel weer die de string bevat, plus 4 regels tekst na de ens-string in het ifconfig-commando. Uitvoer Omgekeerd zal in het onderstaande voorbeeld het gebruik van de -B-vlag de regel weergeven die de zoekreeks bevat, plus 3 regels tekst voor de ether-string in het ifconfig-commando. Uitvoer

$ ifconfig | grep -B 4 ether

Het gebruik van grep met REGEX – reguliere expressies

De term REGEX is een acroniem voor REGuliere EXpressie. Een REGEX is een reeks tekens die wordt gebruikt om een patroon te matchen. Hieronder volgen enkele voorbeelden:

^      Matches characters at the beginning of a line
$      Matches characters at the end of a line
"."    Matches any character
[a-z]  Matches any characters between A and Z
[^ ..] Matches anything apart from what is contained in the brackets

Voorbeeld Om regels af te drukken die beginnen met een bepaald karakter, is de syntaxis als volgt;

grep ^character file_name

Bijvoorbeeld, om de regels weer te geven die beginnen met de letter “d” in ons bestand welcome.txt, zouden we uitvoeren

$ grep ^d welcome.txt 

Uitvoer Om regels weer te geven die eindigen met de letter ‘x’, voer uit

$ grep x$ welcome.txt

Uitvoer

Hulp krijgen met meer Grep-opties

Als u meer wilt leren over het gebruik van het Grep-commando, voer dan het onderstaande commando uit om een voorbeeld te krijgen van andere vlaggen of opties die u samen met het commando kunt gebruiken.

$ grep --help

Voorbeelduitvoer We waarderen uw tijd voor het doornemen van deze tutorial. Voel u vrij om de commando’s uit te proberen en laat ons weten hoe het ging.

Source:
https://www.digitalocean.com/community/tutorials/grep-command-in-linux-unix