Op Unix-achtige besturingssystemen zoekt de opdracht egrep naar een tekstpatroon, waarbij uitgebreide reguliere expressies worden gebruikt om de overeenkomst uit te voeren. Het uitvoeren van egrep is gelijk aan het uitvoeren van grep met de -E optie.
Deze pagina behandelt de GNU/Linux versie van egrep.
Syntax
egrep PATTERN
Options
-A NUM, –after-context=NUM |
Print NUM regels van trailing context na overeenkomende regels. Plaatst een regel met — tussen aaneengesloten groepen overeenkomsten. |
-a, –text | Verwerk een binair bestand alsof het tekst is; dit is gelijkwaardig aan de optie –binary-files=text. |
-B NUM, -voor-context=NUM |
Print NUM regels met voorloopcontext vóór overeenkomende regels. Plaatst een regel met — tussen aaneengesloten groepen overeenkomsten. |
-C NUM, –context=NUM | Print NUM regels van uitvoercontext. Plaatst een regel met — tussen aaneengesloten groepen overeenkomsten. |
-b, –byte-offset | Print de byte-offset in het invoerbestand vóór elke uitvoerregel. |
–binary-files=TYPE | Als de eerste paar bytes van een bestand aangeven dat het bestand binaire gegevens bevat, neem dan aan dat het bestand van het type TYPE is. TYPE is standaard binair, en grep geeft normaal gesproken ofwel een bericht van één regel dat een binair bestand overeenkomt, of geen bericht als er geen overeenkomst is. Als TYPE zonder-match is, neemt grep aan dat een binair bestand niet overeenkomt; dit is gelijk aan de -I optie. Als TYPE tekst is, verwerkt grep een binair bestand alsof het tekst is; dit is gelijk aan de optie -a. Waarschuwing: grep –binary-files=text kan binaire rommel uitvoeren, wat vervelende neveneffecten kan hebben als de uitvoer een terminal is en als de terminal driver een deel ervan als commando’s interpreteert. |
–colour, –color |
Omring de overeenkomende string met de marker vind in GREP_COLOR omgevingsvariabele. WHEN kan zijn ‘nooit’, ‘altijd’, of ‘auto’ |
-c, –count | Onderdruk de normale uitvoer; druk in plaats daarvan een telling van overeenkomende regels af voor elk invoerbestand. Met de -v, –invert-match optie (zie hieronder), tel je niet-overeenkomende regels. |
-D ACTION, –devices=ACTION |
Als een invoerbestand een apparaat, FIFO of socket is, gebruik dan ACTION om het te verwerken. Standaard staat ACTION op lezen, wat betekent dat apparaten worden gelezen alsof het gewone bestanden zijn. Als ACTION op skip staat, worden apparaten stilzwijgend overgeslagen. |
-d ACTION, –directories=ACTION |
Als een invoerbestand een directory is, gebruik dan ACTION om het te verwerken. Standaard staat ACTION op lezen, wat betekent dat directories worden gelezen alsof het gewone bestanden zijn. Als ACTION op skip staat, worden directories stilzwijgend overgeslagen. Als ACTION recurse is, leest grep recursief alle bestanden onder elke directory; dit is gelijk aan de -r optie. |
-e PATTERN, –regexp=PATTERN |
Gebruik PATTERN als het patroon; handig om patronen te beschermen die beginnen met “-“. |
-F, –fixed-strings | Interpreteer PATTERN als een lijst van vaste strings, gescheiden door newlines, waarop mag worden gematcht. |
-P, –perl-regexp | Interpreteer PATTERN als een Perl reguliere expressie. |
-f FILE, –file=FILE | Ophaal patronen uit FILE, één per regel. Het lege bestand bevat geen patronen, en komt dus met niets overeen. |
-G, –basic-regexp | Interpreteer PATTERN als een basis reguliere expressie (zie hieronder). Dit is de standaardinstelling. |
-H, –with-filename | Print de bestandsnaam voor elke overeenkomst. |
-h, –no-filename | Het voorvoegsel van bestandsnamen onderdrukken bij het zoeken naar meerdere bestanden. |
–help | Een kort help-bericht laten zien. |
-I | Verwerk een binair bestand alsof het geen overeenkomende gegevens bevat; dit is gelijkwaardig aan de optie –binary-files=without-match. |
-i, –ignore-case | Het onderscheid tussen hoofd- en kleine letters in zowel de PATTERN als de invoerbestanden wordt genegeerd. |
-L, -files-without-match |
onderdruk de normale uitvoer; druk in plaats daarvan de naam af van elk invoerbestand waarvan normaal geen uitvoer zou worden afgedrukt. Het scannen stopt bij de eerste overeenkomst. |
-l, –files-with-matches | Onderdruk de normale uitvoer; druk in plaats daarvan de naam af van elk invoerbestand waarvan de uitvoer normaal gesproken zou worden afgedrukt. Het scannen stopt bij de eerste overeenkomst. |
-m NUM, –max-count=NUM |
Stop met het lezen van een bestand na NUM overeenkomende regels. Als de invoer standaardinvoer is van een regelmatig bestand, en er worden NUM overeenkomende regels uitgevoerd, dan zorgt grep ervoor dat de standaardinvoer wordt gepositioneerd tot na de laatste overeenkomende regel voordat het afsluit, ongeacht de aanwezigheid van achterliggende contextregels. Dit stelt een aanroepend proces in staat om een zoekactie te hervatten. Wanneer grep stopt na NUM overeenkomende regels, voert het alle achterliggende contextregels uit. Als de -c of –count optie ook wordt gebruikt, geeft grep geen count groter dan NUM weer. Wanneer de -v of –invert-match optie ook wordt gebruikt, stopt grep na het uitvoeren van NUM niet overeenkomende lijnen. |
–mmap | Gebruik, indien mogelijk, de mmap system call om invoer te lezen, in plaats van de standaard read system call. In sommige situaties levert –mmap een betere prestatie. –mmap kan echter ongedefinieerd gedrag veroorzaken (inclusief core dumps) als een invoerbestand krimpt terwijl grep actief is, of als er een I/O-fout optreedt. |
-n, –line-number | Prefixeer elke uitvoerregel met het regelnummer in zijn invoerbestand. |
-o, –only-matching | Toon alleen het deel van een overeenkomende regel dat overeenkomt met PATTERN. |
–label=LABEL | Toont invoer die werkelijk van de standaardinvoer komt als invoer die afkomstig is van bestand LABEL. Dit is vooral nuttig voor hulpmiddelen zoals zgrep, b.v., gzip -cd foo.gz |grep -H –label=foo iets |
–line-buffered | Gebruik regelbuffering. Dit kan ten koste gaan van de prestaties. |
-q, –quiet, –silent | Zwijg; schrijf niets naar de standaarduitvoer. Verlaat het programma onmiddellijk met de status nul als er een overeenkomst is gevonden, zelfs als er een fout is opgetreden. Zie ook de -s of –no-messages optie. |
-R, -r, –recursive | Leest alle bestanden onder elke directory, recursief; dit is gelijkwaardig aan de -d recurse optie. Gewijzigd door: –include=PATTERN Recurseer in directories alleen naar bestanden die overeenkomen met PATTERN. –exclude=PATTERN Recurseer in directories sla bestanden over die overeenkomen met PATTERN. |
-s, –no-messages | Suppress foutmeldingen over niet-bestaande of onleesbare bestanden. Opmerking over overdraagbaarheid: in tegenstelling tot GNU grep, voldeed traditionele grep niet aan POSIX.2, omdat traditionele grep geen -q optie had en zijn -s optie zich gedroeg als GNU grep’s -q optie. Shell scripts die bedoeld zijn om portable te zijn naar traditionele grep zouden zowel -q als -s moeten vermijden en in plaats daarvan de uitvoer moeten omleiden naar /dev/null. |
-U, –binary | Behandel het bestand (of de bestanden) als binair. Standaard, onder MS-DOS en Microsoft Windows, raadt grep het bestandstype door te kijken naar de inhoud van de eerste 32 KB die uit het bestand gelezen wordt. Als grep besluit dat het bestand een tekstbestand is, verwijdert het de CR-karakters uit de originele bestandsinhoud (om reguliere expressies met ^ en $ correct te laten werken). Het opgeven van -U heft dit giswerk op, waardoor alle bestanden letterlijk worden gelezen en doorgegeven aan het matchingsmechanisme; als het bestand een tekstbestand is met CR/LF-paren aan het eind van elke regel, zorgt dit ervoor dat sommige reguliere expressies mislukken. Deze optie heeft geen effect op andere platformen dan MS-DOS en MS-Windows. |
-u, –unix-byte-offsets | Rapport Unix-style byte-offsets. Deze schakeloptie zorgt ervoor dat grep byte-offsets rapporteert alsof het bestand een tekstbestand in Unix-stijl is, d.w.z. met CR-karakters weggelaten. Dit levert resultaten op die identiek zijn aan het uitvoeren van grep op een Unix machine. Deze optie heeft geen effect tenzij de optie -b ook wordt gebruikt; ze heeft geen effect op andere platformen dan MS-DOS en MS-Windows. |
-V, –version | Print het versienummer van grep naar de standaardfoutmelding. Dit versienummer moet worden opgenomen in alle bugrapporten (zie hieronder). |
-v, –invert-match | Draai de betekenis van matching om, om niet-matchende regels te selecteren. |
-w, –word-regexp | Selecteer alleen die regels die matches bevatten die hele woorden vormen. De test is dat de overeenkomende substring ofwel aan het begin van de lijn moet staan, of voorafgegaan moet worden door een niet-woord constituent karakter. Evenzo moet het aan het eind van de regel staan of gevolgd worden door een niet-woordelijk bestandsteken. Woordbestanddelen zijn letters, cijfers en de underscore. |
-x, –line-regexp | Selecteer alleen de overeenkomsten die exact overeenkomen met de hele regel. |
-y | Obsolete synoniem voor -i. |
-Z, –null | Geef een byte van nul weer (het ASCII NULL teken) in plaats van het teken dat normaal gesproken volgt op een bestandsnaam. Bijvoorbeeld, grep -lZ voert een nul byte uit na elke bestandsnaam in plaats van de gebruikelijke newline. Deze optie maakt de uitvoer ondubbelzinnig, zelfs in de aanwezigheid van bestandsnamen die ongebruikelijke tekens zoals newlines bevatten. Deze optie kan worden gebruikt met commando’s als find -print0, perl -0, sort -z, en xargs -0 om willekeurige bestandsnamen te verwerken, zelfs die met newline-tekens. |
Reguliere expressies
Een reguliere expressie is een patroon dat een verzameling tekenreeksen beschrijft. Reguliere expressies worden analoog aan rekenkundige expressies geconstrueerd, waarbij verschillende operatoren worden gebruikt om kleinere expressies te combineren.
Grep begrijpt twee verschillende versies van de reguliere expressiesyntaxis: “basic” en “extended.” In GNU grep, is er geen verschil in beschikbare functionaliteit met behulp van beide syntaxis. In andere implementaties zijn basic reguliere expressies minder krachtig. De volgende beschrijving is van toepassing op uitgebreide reguliere uitdrukkingen, die worden gebruikt in egrep; verschillen voor basis reguliere uitdrukkingen worden daarna samengevat.
De fundamentele bouwstenen zijn de reguliere uitdrukkingen die overeenkomen met een enkel karakter. De meeste tekens, inclusief alle letters en cijfers, zijn reguliere expressies die met zichzelf overeenkomen. Elk metacharacter met een speciale betekenis kan worden gequote door het vooraf te laten gaan door een backslash.
Een bracket expressie is een lijst van karakters omsloten door . Het komt overeen met elk afzonderlijk teken in die lijst; indien het eerste teken van de lijst het caret ^ is, komt het overeen met elk teken dat niet in de lijst voorkomt. De reguliere uitdrukking komt bijvoorbeeld overeen met elk afzonderlijk cijfer.
Binnen een haakjesuitdrukking bestaat een bereikuitdrukking uit twee tekens gescheiden door een koppelteken (“-“). Deze komt overeen met elk afzonderlijk teken dat tussen de twee tekens staat, inclusief, met gebruik van de collatievolgorde en tekenset van de locale. In de standaard C-taal is dit bijvoorbeeld gelijk aan . Veel locales sorteren karakters in dictionary-volgorde, en in deze locales is is vaak niet equivalent met ; het kan bijvoorbeeld equivalent zijn met ,. Om de traditionele interpretatie van haakjes uitdrukkingen te verkrijgen, kunt u de C locale gebruiken door de LC_ALL omgevingsvariabele in te stellen op de waarde C.
Tenslotte zijn bepaalde benoemde klassen van tekens vooraf gedefinieerd binnen haakjes uitdrukkingen, zoals hieronder. De namen spreken voor zich en zijn , , , , , , , , , , en . Bijvoorbeeld, ] betekent , behalve dat de laatste vorm afhankelijk is van de C locale en de ASCII karakter codering, terwijl de eerste onafhankelijk is van locale en karakter set. (Merk op dat de haakjes in deze klassennamen deel uitmaken van de symbolische namen, en moeten worden opgenomen in aanvulling op de haakjes die de lijst met haakjes begrenzen). De meeste metacharacters verliezen hun speciale betekenis binnen lijsten. Om een letterlijke ] in de lijst op te nemen, plaatst u die eerst in de lijst. Op dezelfde manier, om een letterlijke ^ op te nemen, plaats het overal behalve eerst. Tenslotte, om een letterlijke – op te nemen plaatst u deze als laatste.
De punt . komt overeen met elk afzonderlijk teken. Het symbool ^ is een synoniem voor ] en ^ is een synoniem voor ].
Het caret ^ en het dollarteken (“$”) zijn metacharacters die respectievelijk overeenkomen met de lege tekenreeks aan het begin en einde van een regel. De symbolen ^< en ^> komen respectievelijk overeen met de lege tekenreeks aan het begin en het einde van een woord. Het symbool \b komt overeen met de lege tekenreeks aan de rand van een woord, en \B komt overeen met de lege tekenreeks mits deze niet aan de rand van een woord staat.
Een reguliere uitdrukking kan worden gevolgd door een van de volgende herhalingsoperatoren:
? | Het voorgaande item is optioneel en wordt maximaal één keer gematched. |
* | Het voorgaande item wordt nul of meer keer gematched. |
+ | Het voorgaande item wordt één of meer keer gematched. |
{n} | Het voorgaande item wordt precies n keer gematcht. |
{n,} | Het voorgaande item wordt n of meer keer gematcht. |
{n,m} | Het voorgaande item komt minstens n keer voor, maar niet meer dan m keer. |
Twee reguliere expressies mogen aan elkaar worden gekoppeld; de resulterende reguliere expressie komt overeen met elke string die wordt gevormd door twee substrings aan elkaar te koppelen die respectievelijk overeenkomen met de samengevoegde subexpressies.
Twee reguliere uitdrukkingen mogen worden samengevoegd door de infix operator |; de resulterende reguliere uitdrukking komt overeen met elke tekenreeks die overeenkomt met een van beide subexpressies.
Herhaling heeft voorrang boven aaneenschakeling, die op haar beurt voorrang heeft boven afwisseling. Een hele subexpressie kan tussen haakjes worden geplaatst om deze voorrangsregels op te heffen.
De terugverwijzing \n, waarbij n een enkel cijfer is, komt overeen met de substring die eerder overeenkwam met de n-de subexpressie van de reguliere uitdrukking.
In gewone reguliere uitdrukkingen verliezen de metacharakters ?, +, {, |, (, en ) hun speciale betekenis; in plaats daarvan gebruikt u de backslashed versies ?
Traditionele egrep ondersteunde het { metacharacter niet, en sommige egrep implementaties ondersteunen in plaats daarvan {, dus portable scripts zouden { in egrep patronen moeten vermijden en moeten gebruiken om een letterlijke { te matchen.
GNU egrep probeert het traditionele gebruik te ondersteunen door aan te nemen dat { niet speciaal is als het het begin zou zijn van een ongeldige intervalspecificatie. Bijvoorbeeld, het shell commando egrep ‘{1’ zoekt naar de twee-karakter string {1 in plaats van een syntaxis fout in de reguliere expressie te rapporteren. POSIX.2 staat dit gedrag toe als een uitbreiding, maar portable scripts zouden het moeten vermijden.
Omgevingsvariabelen
Grep’s gedrag wordt beïnvloed door de volgende omgevingsvariabelen:
Een locale LC_foo wordt gespecificeerd door het onderzoeken van de drie omgevingsvariabelen LC_ALL, LC_foo, LANG, in die volgorde. De eerste van deze variabelen die is ingesteld specificeert de locale. Bijvoorbeeld, als LC_ALL niet is ingesteld, maar LC_MESSAGES is ingesteld op pt_BR, dan wordt Braziliaans Portugees gebruikt voor de LC_MESSAGES locale. De C locale wordt gebruikt als geen van deze omgevingsvariabelen is ingesteld, of als de locale catalogus niet is geïnstalleerd, of als grep niet is gecompileerd met nationale taalondersteuning (NLS).
GREP_OPTIONS
Deze variabele specificeert standaard opties die voor expliciete opties moeten worden geplaatst. Als GREP_OPTIONS bijvoorbeeld ‘–binary-files=without-match –directories=skip’ is, gedraagt grep zich alsof de twee opties –binary-files=without-match en –directories=skip vóór de expliciete opties zijn opgegeven. Optiespecificaties worden gescheiden door witruimte. Een backslash escaped het volgende karakter, dus het kan gebruikt worden om een optie aan te geven die whitespace of een backslash bevat.
GREP_COLOR
Specificeert de marker voor highlighting.
LC_ALL, LC_COLLATE, LANG
Deze variabelen specificeren de LC_COLLATE locale, die de collatievolgorde bepaalt die wordt gebruikt om bereikuitdrukkingen te interpreteren zoals .
LC_ALL, LC_CTYPE, LANG
Deze variabelen specificeren de LC_CTYPE locale, die het type tekens bepaalt, b.v, welke tekens spaties zijn.
LC_ALL, LC_MESSAGES, LANG
Deze variabelen specificeren de LC_MESSAGES locale, die de taal bepaalt die grep gebruikt voor berichten. De standaard C locale gebruikt Amerikaans Engelse berichten.
POSIXLY_CORRECT
Indien ingesteld, gedraagt grep zich zoals POSIX.2 vereist; anders gedraagt grep zich meer als andere GNU programma’s. POSIX.2 vereist dat opties die volgen op bestandsnamen behandeld moeten worden als bestandsnamen; standaard worden zulke opties gepermuteerd naar de voorkant van de operand lijst en worden behandeld als opties. Ook vereist POSIX.2 dat niet-herkende opties worden gediagnosticeerd als “illegaal”, maar omdat ze niet echt tegen de wet zijn wordt standaard de diagnose “ongeldig” gesteld. POSIXLY_CORRECT schakelt ook _N_GNU_nonoption_argv_flags_ uit, hieronder beschreven.
_N_GNU_nonoption_argv_flags_
(Hier is N het numerieke proces ID van grep.) Als het i-de karakter van de waarde van deze omgevingsvariabele 1 is, beschouw dan de i-de operand van grep niet als een optie, zelfs niet als het er een lijkt te zijn. Een shell kan deze variabele in de omgeving zetten voor elk commando dat hij uitvoert, om aan te geven welke operanden het resultaat zijn van wildcard-expansie van bestandsnamen en daarom niet moeten worden behandeld als opties. Dit gedrag is alleen beschikbaar met de GNU C bibliotheek, en alleen wanneer POSIXLY_CORRECT niet is ingesteld.
Voorbeelden
egrep "support|help|windows" myfile.txt
Zoek naar patronen van ondersteunende hulp en vensters in het bestand myfile.txt.
egrep '^+$' myfile.txt
Zoek naar alle regels in myfile.txt die een regel beginnen met een alfabetisch woord dat ook de regel eindigt.
egrep -c '^begin|end$' myfile.txt
Tel het aantal regels in myfile.txt die beginnen met het woord ‘begin’ of eindigen met het woord ‘eind’.
fgrep – Filtert tekst die overeenkomt met een tekenreeks met vaste tekens.
grep – Filtert tekst die overeenkomt met een reguliere expressie.
sed – Een hulpprogramma voor het filteren en transformeren van tekst.
sh – De Bourne-shell opdrachtinterpreter.