Skip to main content

Voorbeelden van gebruik van de Linux grep-opdracht

Pipes, Grep, Sort Commands: Linux Tutorial 9 (April 2025)

Pipes, Grep, Sort Commands: Linux Tutorial 9 (April 2025)
Anonim

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 09

Hoe 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 boeken

De 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-case

Je kunt ook de schakeloptie -i als volgt gebruiken:

grep -i de boeken

Lees hieronder verder

02 van 09

Zoeken 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 gallowayGlasgowEdinburgh

Als u alle plaatsen met inver in de naam wilt vinden, gebruikt u de volgende syntaxis:

grep inver * plaatsen

Het 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 plaatsen

Het 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 * domeinnamen

De 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-domeinnamen

Dit zou goed werken tenzij er een domein was met de volgende naam:

aboutycom.com

Als u echt wilt zoeken naar de term about.com, moet u als volgt aan de stip ontsnappen:

grep * over .com-domeinnamen

Het laatste jokerteken dat u wilt tonen, is het vraagteken dat staat voor nul of één teken.

Bijvoorbeeld:

grep? ber placenames

Het bovenstaande commando zou aberdeen, aberystwyth of zelfs berwick retourneren.

Lees hieronder verder

03 van 09

Zoeken 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 teams

Het 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 $ -teams

Het bovenstaande commando zou terugkeren naar Manchester United en Newcastle United, maar niet naar FC United Of Manchester.

04 van 09

Het 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 invoerbestand

Als het patroon twee keer is vergeleken, wordt nummer 2 geretourneerd.

Lees hieronder verder

05 van 09

Alle 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 $ places

De 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 $ places

Dit zou alle plaatsen vinden die niet eindigen met land.

06 van 09

Hoe 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 ^ $ plaatsen

Helaas 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 ^ $ plaatsen

Het 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 ^ $ plaatsen

Lees hieronder verder

07 van 09

Hoe 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' bestandsnaam

Met 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' bestandsnaam

Als u alleen letters en geen cijfers of andere symbolen wilt gebruiken, kunt u de volgende syntaxis gebruiken:

grep 'a-zA-Z' bestandsnaam

Je kunt hetzelfde doen met getallen als volgt:

grep '0-9' bestandsnaam 08 van 09

Op 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 -" nummers

Zoals 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 } -" nummers

De 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 09

De 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 -ef

Alle lopende processen op uw systeem worden weergegeven.

U kunt grep als volgt gebruiken om naar een bepaald lopend proces te zoeken:

ps -ef | grep firefox

Samenvatting

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.