De Linux grep-opdracht wordt gebruikt als een methode voor het filteren van invoer. GREP staat voor Global Regular Expression Printer en daarom moet u kennis hebben van reguliere expressies om deze effectief te kunnen gebruiken.
In dit artikel leert u een aantal voorbeelden die u zullen helpen de grep-opdracht te begrijpen.
01 van 09Hoe een string in een bestand te zoeken met GREP
Stel je voor dat je een tekstbestand hebt met de naam boeken met de volgende kinderboektitels:
- Robin Hood
- Roodkapje
- Peter Pan
- Goudlokje en de drie beren
- Sneeuwwitje en de Zeven Dwergen
- Pinnochio
- De kat in de hoed
- De drie kleine biggetjes
- De Gruffalo
- Sjakie en de chocoladefabriek
Als u alle boeken met het woord 'De' in de titel wilt vinden, gebruikt u de volgende syntaxis:
grep De boekenDe volgende resultaten worden geretourneerd:
- Goudlokje en de drie beren
- Sneeuwwitje en de Zeven Dwergen
- De kat in de hoed
- De drie kleine biggetjes
- De Gruffalo
- Sjakie en de chocoladefabriek
In elk geval wordt het woord "De" gemarkeerd.
De zoekopdracht is hoofdlettergevoelig, dus als een van de titels "de" had in plaats van "De" dan zou deze niet zijn geretourneerd.
Om de zaak te negeren, kunt u de volgende schakelaar toevoegen:
grep the books --ignore-caseJe kunt ook de schakeloptie -i als volgt gebruiken:
Lees hieronder verder
02 van 09Zoeken naar een tekenreeks in een bestand met behulp van jokertekens
De grep-opdracht is erg krachtig. U kunt een veelvoud aan patroonvergelijkingstechnieken gebruiken om resultaten te filteren.
In dit voorbeeld laat ik zien hoe je met jokertekens naar een tekenreeks in een bestand kunt zoeken.
Stel je voor dat je een bestand hebt met de naam Plaatsen met de volgende Schotse plaatsnamen:
aberdeenaberystwythAberlourinverurieInvernessnewburghnieuwe hertennieuwe gallowayGlasgowEdinburghAls u alle plaatsen met inver in de naam wilt vinden, gebruikt u de volgende syntaxis:
grep inver * plaatsenHet asterisk (*) jokerteken staat voor 0 of veel. Dus als je een plaats hebt die Inver heet of een plaats die Inverness heet, dan zouden beide worden geretourneerd.
Een ander jokerteken dat u kunt gebruiken, is de punt (.). U kunt dit gebruiken om een enkele letter te matchen.
grep inver.r plaatsenHet bovenstaande commando zou plaatsen vinden die inverurie en inverary genoemd worden, maar zou geen invereerie vinden omdat er maar één wildcard tussen de twee r's kan zijn, zoals aangegeven door de enkele periode.
De jokertekenperiode is nuttig maar kan problemen veroorzaken als u er een hebt als onderdeel van de tekst die u zoekt.
Bekijk bijvoorbeeld deze lijst met domeinnamen
- linux.about.com
- pcsupport.about.com
- mp3.about.com
- minecraft.about.com
- androidgames.about.com
- netforbeginners.about.com
- everydaylinuxuser.com
- google.co.uk
- google.au
- direct.gov.uk
Als u alle informatie over .coms wilt vinden, kunt u gewoon zoeken met behulp van de volgende syntaxis:
grep * about * domeinnamenDe bovenstaande opdracht zou uitvallen als de lijst de volgende naam bevat:
- everydaylinuxuser.com/about.html
U zou daarom de volgende syntaxis kunnen proberen:
grep * about.com-domeinnamenDit zou goed werken tenzij er een domein was met de volgende naam:
aboutycom.comAls u echt wilt zoeken naar de term about.com, moet u als volgt aan de stip ontsnappen:
grep * over .com-domeinnamenHet laatste jokerteken dat u wilt tonen, is het vraagteken dat staat voor nul of één teken.
Bijvoorbeeld:
grep? ber placenamesHet bovenstaande commando zou aberdeen, aberystwyth of zelfs berwick retourneren.
Lees hieronder verder
03 van 09Zoeken naar snaren aan het begin en einde van de regel met grep
Met het symbool karaat (^) en dollar ($) kunt u zoeken naar patronen aan het begin en einde van lijnen.
Stel je voor dat je een bestand hebt met de naam voetbal met de volgende teamnamen:
- Blackpool
- Liverpool
- Manchester City
- Leicester stad
- Manchester United
- Newcastle United
- FC United Of Manchester
Als je alle teams wilde vinden die met Manchester begonnen, zou je de volgende syntaxis gebruiken:
grep ^ Manchester teamsHet bovenstaande commando zou Manchester City en Manchester United retourneren, maar niet FC United Of Manchester.
Je kunt ook alle teams die eindigen op United vinden met de volgende syntaxis:
Grep United $ -teamsHet bovenstaande commando zou terugkeren naar Manchester United en Newcastle United, maar niet naar FC United Of Manchester.
04 van 09Het aantal overeenkomsten tellen met grep
Als u niet de feitelijke regels wilt teruggeven die overeenkomen met een patroon met behulp van grep, maar u wilt alleen weten hoeveel er zijn, kunt u de volgende syntaxis gebruiken:
grep -c patroon invoerbestandAls het patroon twee keer is vergeleken, wordt nummer 2 geretourneerd.
Lees hieronder verder
05 van 09Alle voorwaarden vinden die niet overeenkomen met het gebruik van grep
Stel je voor dat je een lijst met plaatsnamen hebt met de volgende landen:
- aberdeen Schotland
- Glasgow Schotland
- Liverpool Engeland
- Colwyn Bay
- Londen, Engeland
Je hebt misschien gemerkt dat Colwyn Bay er geen land bij heeft.
Als u naar alle plaatsen met een land wilt zoeken, kunt u de volgende syntaxis gebruiken:
grep land $ placesDe resultaten zouden alle plaatsen behalve de baai van Colwyn zijn.
Dit werkt natuurlijk alleen voor plaatsen die eindigen op het land (nauwelijks wetenschappelijk).
U kunt de selectie omdraaien met behulp van de volgende syntaxis:
grep -v land $ placesDit zou alle plaatsen vinden die niet eindigen met land.
06 van 09Hoe lege regels in bestanden te vinden met grep
Stel dat u een invoerbestand hebt dat wordt gebruikt door een toepassing van een derde partij die stopt met het lezen van het bestand wanneer het een lege regel als volgt vindt:
- Aberdeen Schotland
- inverness schotland
- Liverpool Engeland
- Colwyn Bay Wales
Wanneer de toepassing na liverpool op de regel komt, stopt het met lezen. Colwyn bay wordt volledig gemist.
U kunt grep gebruiken om te zoeken naar lege regels met de volgende syntaxis:
grep ^ $ plaatsenHelaas is dit niet erg handig omdat het gewoon de lege regels retourneert.
U kunt natuurlijk een telling krijgen van het aantal lege regels als een controle om te zien of het bestand als volgt geldig is:
grep -c ^ $ plaatsenHet zou echter handiger zijn om de regelnummers te kennen die een lege regel hebben, zodat u ze kunt vervangen. U kunt dat doen met de volgende opdracht:
grep -n ^ $ plaatsenLees hieronder verder
07 van 09Hoe te zoeken naar hoofdletters of kleine letters met grep
Met grep kunt u bepalen welke regels in een bestand hoofdletters bevatten met behulp van de volgende syntaxis:
grep 'A-Z' bestandsnaamMet de vierkante haken kun je het bereik van tekens bepalen. In het bovenstaande voorbeeld komt het overeen met elk teken dat tussen A en Z ligt.
Daarom kunt u de volgende syntaxis gebruiken om kleine letters te evenaren:
grep 'a-z' bestandsnaamAls u alleen letters en geen cijfers of andere symbolen wilt gebruiken, kunt u de volgende syntaxis gebruiken:
grep 'a-zA-Z' bestandsnaamJe kunt hetzelfde doen met getallen als volgt:
grep '0-9' bestandsnaam 08 van 09Op zoek naar herhalende patronen met grep
U kunt accolades {} gebruiken om naar een herhalend patroon te zoeken.
Stel je voor dat je een bestand met telefoonnummers hebt als volgt:
- 055-1234
- 055-4567
- 555-1545
- 444-0167
- 444-0854
- 4549-2234
- x44-1234
U weet dat het eerste deel van het nummer uit drie cijfers bestaat en dat u de lijnen wilt vinden die niet overeenkomen met dit patroon.
Uit het vorige voorbeeld weet u dat 0-9 alle getallen in een bestand retourneert.
In dit geval willen we de regels die beginnen met drie getallen gevolgd door een koppelteken (-). U kunt dit doen met de volgende syntaxis:
grep "^ 0-9 0-9 0-9 -" nummersZoals we uit voorgaande voorbeelden weten, betekent de karaat (^) dat de lijn met het volgende patroon moet beginnen.
De 0-9 zoekt naar een willekeurig getal tussen 0 en 9. Omdat dit drie keer voorkomt, komt het overeen met 3 nummers. Tot slot is er een koppelteken om aan te geven dat een koppelteken de drie getallen moet opvolgen.
Door de accolades te gebruiken, kunt u de zoekopdracht als volgt kleiner maken:
grep "^ 0-9 {3 } -" nummersDe schuine streep ontsnapt aan de {haak zodat deze werkt als onderdeel van de reguliere expressie, maar in wezen is wat dit zegt 0-9 {3}, wat elk getal tussen 0 en 9 drie keer betekent.
De accolades kunnen ook als volgt worden gebruikt:
{5,10}{5,}De {5,10} betekent dat het gezochte personage minstens 5 keer maar niet meer dan 10 herhaald moet worden, terwijl de {5,} betekent dat het personage minstens 5 keer herhaald moet worden, maar het kan meer dan dat zijn.
Lees hieronder verder
09 van 09De uitvoer van andere opdrachten gebruiken Grep gebruiken
Tot nu toe hebben we gekeken naar patroonafstemming binnen individuele bestanden, maar grep kan de uitvoer van andere opdrachten gebruiken als de invoer voor patroonafstemming.
Een goed voorbeeld hiervan is het gebruik van de ps-opdracht met actieve processen.
Voer bijvoorbeeld de volgende opdracht uit:
ps -efAlle lopende processen op uw systeem worden weergegeven.
U kunt grep als volgt gebruiken om naar een bepaald lopend proces te zoeken:
ps -ef | grep firefoxSamenvatting
De grep-opdracht is een fundamentele Linux-opdracht en deze is de moeite waard om te leren, omdat het je leven veel gemakkelijker zal maken wanneer je naar bestanden en processen zoekt wanneer je de terminal gebruikt.