Heb je al eerder grep gebruikt?? Meestal kan de basis grep-truc het meeste werk doen. grep biedt echter talloze manieren om de zoekopdracht uit te voeren en de uitvoer af te stemmen op een meer bruikbare versie. Laten we in dit artikel eens kijken naar het gebruik van de grep-opdracht.
Grep-gebruik
Bestaan verifiëren
Als je een Linux-distro gebruikt, heb je grep al geïnstalleerd. Voer de volgende opdracht uit in de terminal:.
grep --versie
Deze opdracht wordt gebruikt om de versie van de momenteel geïnstalleerde grep . weer te geven. Nu hebben we een demobestand nodig. In mijn geval genereer ik een tekstbestand dat alle geïnstalleerde pakketten op mijn systeem bevat.
Basis
Het basisgebruik van grep volgt de volgende structuur:.
grepOf, voor een beter begrip, gebruik deze.
grepIn dit geval zal grep een zoekopdracht in het bestand uitvoeren en alle regels afdrukken die het patroon bevatten (zoekterm).
grep python ~/Desktop/PackageList.tekst
Grep doorzocht het bestand "PackageList".txt" die ik eerder heb gegenereerd en alle regels heb afgedrukt die "python" bevatten.
Dezelfde bewerking kan op een andere manier worden uitgevoerd. Bekijk het volgende voorbeeld.
kat ~/Desktop/PackageList.txt | grep python
Hier heb ik met het commando "cat" de inhoud van het bestand "PackageList" verzonden.txt" naar grep. Met behulp van de uitvoer van cat voerde grep de zoekopdracht uit en drukte de regels af die de zoekterm bevatten.
Nu komt er iets leuks. Je kunt letterlijk meerdere grep-commando's op elkaar stapelen.
kat ~/Desktop/PackageList.txt | grep - | grep p | grep python
De eerste grep filtert tot aan de regels met een koppelteken, de tweede filter tot aan de regels met p, en de laatste grep filtert tot aan de regels met python. Klinkt logisch?
Hoofdlettergevoeligheid
Bij het uitvoeren van een zoekopdracht is hoofdlettergevoeligheid een belangrijke vraag. grep is standaard hoofdlettergevoelig.
Zoeken naar "Python" zal bijvoorbeeld geen resultaat opleveren.
kat ~/Desktop/PackageList.txt | grep Python
Voeg de volgende optie toe om grep hoofdlettergebruik "ongevoelig" te maken:.
kat ~/Desktop/PackageList.txt | grep -i Python
Bestand zoeken
Laten we zeggen dat je een map hebt met talloze tekstbestanden. Uw doel is om de bestanden te identificeren die wel of geen patroon bevatten (zoekterm).
Ik vind deze methode erg handig bij het zoeken in een stapel logbestanden. Omdat ik niet de tijd heb om elk afzonderlijk bestand handmatig te openen en te controleren, heb ik grep om het werk voor mij te doen.
Gebruik voor het weergeven van bestanden die de overeenkomst bevatten de vlag "-l".
grep -l
Zoals het resultaat suggereert, is de term "python" aanwezig in alle 3 bestanden die aanwezig zijn in de map "Desktop".
Gebruik de vlag "-L" voor het weergeven van bestanden zonder enige overeenkomst.
grep -L
"Geen match.txt" is het enige bestand dat de term "python" niet bevat.
Omgekeerd zoeken
Het standaardgedrag van grep is om alleen de lijnen met het overeenkomende patroon af te drukken, rechts? Het is tijd om het proces om te keren. Deze keer drukken we alleen de lijnen ZONDER het bijpassende patroon.
Geef gewoon de "-v" optie door aan grep.
kat ~/Desktop/PackageList.txt | grep -i -v Python
Lijnen printen voor/na de wedstrijd
Standaard drukt grep alleen de regel af die overeenkomt met het zoekpatroon. Met deze techniek kun je grep ook vertellen om lijnen voor/na de wedstrijd af te drukken.
Gebruik de volgende structuur om lijnen voor de wedstrijd af te drukken:.
grep -B
Hier is 5 de nummerregel die grep zal afdrukken VOORDAT de overeenkomende regel.
Gebruik de volgende om lijnen na de wedstrijd af te drukken:.
grep -A
Hoe zit het met het afdrukken van zowel voor als na de overeenkomende regel?? Gebruik in dat geval de vlag "-C".
grep -C
Regelnummer
Wanneer grep de uitvoer toont, wordt het regelnummer niet vermeld. Gebruik voor de bijbehorende regelnummers de vlag "-n".
grep -n
Een woord
Als de vlag "-w" wordt gebruikt, zal grep het patroon als een heel woord behandelen.
grep -w
Zoeken naar grep beperken
Met Grep kunt u het aantal regels specificeren om in het bestand te zoeken. Deze methode is handig als je te maken hebt met een groot bestand (zoals een systeemlogboek). Gebruik de vlag "-m".
grep -m
Recursief zoeken
Het is een van de handigste functies die grep biedt voor intensief gebruik. Grep kan recursief een map doorzoeken en alle overeenkomsten vinden van alle bestanden die het tegenkomt.
grep -ROf,
grep -r
Ik gebruik deze recursieve functie vaak samen met de vlag "-l".
Stille modus
Grep kan worden uitgevoerd in de "stille" modus. In de "stille" modus zal grep geen uitvoer naar de terminal afdrukken. In plaats daarvan wordt 0 geretourneerd (er is tenminste een overeenkomst gevonden) of 1 (geen overeenkomst gevonden).
grep -qecho $?
Regex
Grep staat ook regex-zoekopdrachten (reguliere expressie) toe. Dit voegt een geheel nieuw niveau van complexiteit en bruikbaarheid toe van grep als zoekhulpmiddel.
U kunt bijvoorbeeld haakjes gebruiken om tegelijkertijd naar zowel "te" als "twee" te zoeken.
kat ~/Desktop/gpl-3.0.txt | grep t[wo]o
In dit volgende voorbeeld wordt de regel alleen afgedrukt als de overeenkomst helemaal aan het begin van de regel voorkomt.
grep ^GNU ~/Desktop/gpl-3.0.tekst
Wat betreft het matchen van het einde, gebruik deze.
grep you$ ~/Desktop/gpl-3.0.tekst
Als je Perl regex wilt gebruiken, gebruik dan de "-P" vlag. Het zal het patroon behandelen als Perl regex.
grep -PLaatste gedachten
Grep biedt talloze manieren om de zoekfunctie aan te passen. De beschikbaarheid van regex ontsluit een geheel nieuwe horizon voor mogelijk gebruik van grep. Het leuke is dat je zowel algemene als Perl-regex kunt gebruiken; waar jij je prettig bij voelt.
Raadpleeg voor de meest gedetailleerde uitleg altijd de man-pagina.
man grep
Proost!