In dit artikel laten we u zien hoe u vooraf zoeken op tekenreeksen kunt uitvoeren met Grep met reguliere expressie door u 10 praktische voorbeelden te geven van de implementaties ervan. Veel voorbeelden die in dit artikel worden besproken, hebben praktische implicaties, wat betekent dat je ze kunt gebruiken in je dagelijkse Linux-programmering. De volgende voorbeelden beschrijven enkele regexp-voorbeelden voor vaak gezochte patronen.
Voorbeeld 1: Zoek een enkele bevrachter in een tekstbestand
Om regels in het bestand 'book' uit te voeren die een '$'-teken bevatten, typt u:
$ grep '\$' boekVoorbeeld 2: Zoek een enkele tekenreeks in een tekstbestand
Om regels uit te voeren in het bestand 'book' dat de string '$14' bevat.99', typ:
$ grep '\$14\.99' boekVoorbeeld 3: Zoek een enkele speciale bevrachter in een tekstbestand
Om regels in het bestand 'book' uit te voeren die het teken '\' bevatten, typt u:
$ grep '\\' boekVoorbeeld 4: Overeenkomende regels die beginnen met bepaalde tekst
Gebruik 'ˆ' in een regexp om het begin van een regel aan te duiden.
Om alle regels in '/usr/dict/words' die beginnen met 'pro' uit te voeren, typt u:
$ grep 'ˆpro' /usr/dict/wordsOm alle regels in het bestand 'boek' uit te voeren die beginnen met de tekst 'in het begin', ongeacht hoofdletters, typt u:
$ grep -i 'ˆin het begin' boekOPMERKING: Deze regexps werden geciteerd met 'karakters; dit komt omdat sommige shells het 'ˆ'-teken anders behandelen als een speciaal "metateken"
Naast zoeken op woorden en woordgroepen, kunt u grep gebruiken om te zoeken naar complexe tekstpatronen die reguliere expressies worden genoemd. Een reguliere expressie - of "regexp" - is een tekstreeks van speciale tekens die a . specificeert set van patronen die bij elkaar passen.
Technisch gesproken zijn de woord- of zinspatronen reguliere expressies, gewoon heel eenvoudige. In een reguliere expressie vertegenwoordigen de meeste tekens, inclusief letters en cijfers, zichzelf. Bijvoorbeeld het regexp-patroon 1 komt overeen met de tekenreeks '1' en het patroon jongen komt overeen met de tekenreeks 'jongen'.
Er zijn een aantal gereserveerde tekens, metatekens genaamd, die zichzelf niet vertegenwoordigen in een reguliere expressie, maar ze hebben een speciale betekenis die wordt gebruikt om complexe patronen te bouwen. Deze metakarakters zijn als volgt: ., *, [, ], ˆ, $, en \. Het is goed om op te merken dat dergelijke metatekens veel voorkomen in bijna alle gewone en speciale Linux-distributies. Hier is een goed artikel dat speciale betekenissen van de metatekens behandelt en voorbeelden geeft van hun gebruik.
Voorbeeld 5: Overeenkomende regels die eindigen met bepaalde tekst
Gebruik '$' als het laatste teken van geciteerde tekst om alleen aan het einde van een regel met die tekst overeen te komen. Om regels in het bestand 'gaand' uit te voeren die eindigen op een uitroepteken, typt u:
$ grep'!$' gaatVoorbeeld 6: Passende lijnen van een bepaalde lengte
Om lijnen van een bepaalde lengte te matchen, gebruikt u dat aantal '.' tekens tussen 'ˆ' en '$'- om bijvoorbeeld alle regels te matchen die twee tekens (of kolommen) breed zijn, gebruikt u 'ˆ… $' als de regexp om te zoeken naar.
Om alle regels in '/usr/dict/words' uit te voeren die precies drie tekens breed zijn, typt u:
$ grep 'ˆ… $' /usr/dict/wordsVoor langere regels is het handiger om een andere constructie te gebruiken: 'ˆ.\nummer\$', waarbij nummer het aantal regels is dat overeenkomt. Gebruik ',' om een reeks getallen op te geven.
Om alle regels in '/usr/dict/words' uit te voeren die precies twaalf tekens breed zijn, typt u:
$ grep 'ˆ.\12\$' /usr/dict/wordsOm alle regels in '/usr/dict/words' uit te voeren die tweeëntwintig of meer tekens breed zijn, typt u:
$ grep 'ˆ.\22,\$' /usr/dict/wordsVoorbeeld 7: overeenkomende regels die een of meer Regexp's bevatten
Om regels te matchen die een aantal regexp's bevatten, specificeert u elk van de regexps waarnaar moet worden gezocht tussen alternatie-operatoren ('\|') als de regexp waarnaar moet worden gezocht. Regels die een van de gegeven regexps bevatten, worden uitgevoerd.
Om alle regels in 'playboy' uit te voeren die ofwel de patronen 'het boek' of 'cake' bevatten, typt u:
$ grep 'het boek\|cake' playboyVoorbeeld 8: overeenkomende regels die alle Regexp's bevatten
Om lijnen uit te voeren die overeenkomen: alle van een aantal regexps, gebruik grep om regels uit te voeren die de eerste regexp bevatten die je wilt matchen, en pijp de output naar een grep met de tweede regexp als argument. Ga door met het toevoegen van pijpen aan grep-zoekopdrachten voor alle regexps waarnaar je wilt zoeken.
Om alle regels in 'playlist' uit te voeren die zowel patronen 'the shore' als 'sky' bevatten, ongeacht de hoofdletters, typt u:
$ grep -i 'de kust' afspeellijst | grep -i skyVb 9: Overeenkomende regels die alleen bepaalde tekens bevatten
Om regels te matchen die alleen bepaalde karakters bevatten, gebruikt u de regexp 'ˆ[karakters]*$', waarbij de karakters degene zijn die overeenkomen. Om regels in '/usr/dict/words' uit te voeren die alleen klinkers bevatten, typt u:
$ grep -i 'ˆ[aeiou]*$' /usr/dict/wordsDe optie '-i' komt overeen met tekens, ongeacht de hoofdletters; dus in dit voorbeeld komen alle klinkertekens overeen, ongeacht hoofdletters.
Voorbeeld 10: Zinnen vinden ongeacht de afstand Spa
Een manier om te zoeken naar een zin die kan voorkomen met extra spaties tussen woorden, of over een regel of pagina-einde, is om alle linefeeds en extra spaties uit de invoer te verwijderen en dat vervolgens te grep. Om dit te doen, pipet u de invoer naar tr met "\r\n:\>\|-" als argument voor de '-d' optie (waarbij alle regeleinden uit de invoer worden verwijderd); pijp dat naar het fmt-filter met de '-u'-optie (de tekst wordt met uniforme spatiëring uitgevoerd); en pijp dat om te grijpen naar het patroon om naar te zoeken.
Om over regeleinden heen te zoeken naar de tekenreeks 'op hetzelfde moment als' in het bestand 'docs', typt u:
$ kattendocumenten | tr -d '\r\n:\>\|-' | fmt -u | grep 'tegelijkertijd met'
Samenvatting
In dit artikel hebben we 10 praktische voorbeelden besproken van het gebruik van de Grep Linux-opdracht voor het zoeken en vinden van strings in een tekstbestand text. Onderweg leerden we hoe we reguliere expressies kunnen gebruiken in combinatie met Grep om complexe zoekopdrachten op tekstbestanden uit te voeren. Inmiddels heb je een beter idee van hoe krachtig de zoekfuncties van Linux zijn.
Hier zijn aanvullende bronnen voor diegenen die meer willen weten over Linux-programmering:
Bronnen voor systeembeheerders
- Linux System Admin Guide- Wat is Linux-besturingssysteem en hoe het werkt?
- Linux System Admin Guide - Overzicht van Linux Virtual Memory en Disk Buffer Cache
- Linux System Admin Guide- Best Practices voor het bewaken van Linux-systemen
- Linux System Admin Guide- Best Practices voor het uitvoeren van Linux Boots en Shutdowns
- Linux System Admin Guide- Best Practices voor het maken en beheren van back-upbewerkingen
Bronnen voor Linux-kernelprogrammeurs
- Hoe het geheugenbeheer van het Linux-besturingssysteem werkt
- Uitgebreid overzicht van Linux Kernel-besturingssysteemprocessen
- Wat zijn mechanismen achter Linux Kernel-taakbeheer?
Woordenboek van Linux-bestandssysteem
Uitgebreid overzicht van hoe Linux-bestands- en directorysysteem werkt