Linux egrep-kommandoen

Aktualiseret: På Unix-lignende styresystemer søger egrep-kommandoen efter et tekstmønster ved hjælp af udvidede regulære udtryk til at udføre matchet. Kørsel af egrep svarer til at køre grep med indstillingen -E.

Denne side dækker GNU/Linux-versionen af egrep.

Syntaks

egrep PATTERN 

Optioner

-A NUM,
–after-context=NUM
Udskriv NUM linjer med efterfølgende kontekst efter de matchende linjer. Placerer en linje med — mellem sammenhængende grupper af overensstemmelser.
-a, –text Behandler en binær fil, som om den var tekst; dette svarer til indstillingen –binary-files=text.
-B NUM,
–before-context=NUM
Udskriver NUM linjer med ledende kontekst før de matchende linjer. Placerer en linje indeholdende — mellem sammenhængende grupper af overensstemmelser.
-C NUM, –context=NUM Udskriver NUM linjer med outputkontekst. Placerer en linje, der indeholder –, mellem sammenhængende grupper af kampe.
-b, –byte-offset Udskriv byte-offset i inputfilen før hver outputlinje.
–binary-files=TYPE Hvis de første par bytes i en fil viser, at filen indeholder binære data, antages det, at filen er af typen TYPE. Som standard er TYPE binær, og grep udsender normalt enten en enlinet meddelelse om, at en binær fil passer til, eller ingen meddelelse, hvis der ikke er nogen overensstemmelse. Hvis TYPE er without-match, antager grep, at en binær fil ikke passer; dette svarer til indstillingen -I. Hvis TYPE er text, behandler grep en binær fil som om den var tekst; dette svarer til indstillingen -a. Advarsel: grep –binary-files=text kan udstede binært affald, hvilket kan have ubehagelige bivirkninger, hvis output er en terminal, og hvis terminaldriveren fortolker noget af det som kommandoer.
–colour,
–color
Omgiver den matchende streng med markeringen find i GREP_COLOR-miljøvariablen. WHEN kan være ‘never’, ‘always’ eller ‘auto’
-c, –count Undgå normal output; udskriv i stedet en optælling af matchende linjer for hver inddatafil. Med indstillingen -v, –invert-match (se nedenfor), tælles ikke-matchende linjer.
-D ACTION,
–devices=ACTION
Hvis en inddatafil er en enhed, FIFO eller socket, skal du bruge ACTION til at behandle den. Som standard er ACTION læst, hvilket betyder, at enheder læses, som om de var almindelige filer. Hvis ACTION er skip, springes enheder over i stilhed.
-d ACTION,
–directories=ACTION
Hvis en inddatafil er en mappe, skal du bruge ACTION til at behandle den. Som standard er ACTION læst, hvilket betyder, at kataloger læses, som om de var almindelige filer. Hvis ACTION er skip, springes kataloger over i stilhed. Hvis ACTION er recurse, læser grep alle filer under hver mappe, rekursivt; dette svarer til indstillingen -r.
-e PATTERN,
–regexp=PATTERN
Brug PATTERN som mønster; nyttigt til at beskytte mønstre, der begynder med “-“.
-F, –fixed-strings Interpret PATTERN som en liste over faste strings, adskilt af newlines, der kan matches.
-P, –perl-regexp Interpret PATTERN som et regulært Perl-udtryk.
-f FILE, –file=FILE Opnå mønstre fra FILE, et pr. linje. Den tomme fil indeholder nul mønstre og passer derfor ikke til noget.
-G, –basic-regexp Interpret PATTERN som et grundlæggende regulært udtryk (se nedenfor). Dette er standardindstillingen.
-H, –with-filename Udskriv filnavnet for hvert match.
-h, –no-filename Undgå præfiksering af filnavne på output, når der søges i flere filer.
–help Udfør en kort hjælpemeddelelse.
-I Behandler en binær fil, som om den ikke indeholder matchende data; dette svarer til indstillingen –binary-files=without-match.
-i, –ignore-case Ignorerer skelnen mellem store og små bogstaver i både PATTERN- og inputfilerne.
-L,
–files-without-match
Undertrykker normal output; udskriv i stedet navnet på hver inputfil, hvorfra der normalt ikke ville blive udskrevet output. Scanningen stopper ved det første match.
-l, –files-with-matches Undgå normalt output; udskriv i stedet navnet på hver inddatafil, hvorfra der normalt ville blive udskrevet output. Scanningen stopper ved det første match.
-m NUM,
–max-count=NUM
Stop med at læse en fil efter NUM matchende linjer. Hvis input er standard input fra en regulær fil, og NUM matchende linjer er output, sikrer grep, at standard input er placeret til efter den sidste matchende linje, før det afsluttes, uanset tilstedeværelsen af afsluttende kontekstlinjer. Dette gør det muligt for en kaldende proces at genoptage en søgning. Når grep stopper efter NUM matchende linjer, udsender den eventuelle afsluttende kontekstlinjer. Når indstillingen -c eller –count også anvendes, udsender grep ikke et antal, der er større end NUM. Når indstillingen -v eller –invert-match også anvendes, stopper grep efter at have udsendt NUM ikke-matchende linjer.
–mmap Hvis det er muligt, skal du bruge systemkaldet mmap til at læse input i stedet for standardsystemet read. I nogle situationer giver –mmap en bedre ydeevne. Imidlertid kan –mmap forårsage udefineret opførsel (herunder core dumps), hvis en inddatafil skrumper, mens grep arbejder, eller hvis der opstår en I/O-fejl.
-n, –line-number Præfikser hver udskriftslinje med linjenummeret i dens inddatafil.
-o, –only-matching Viser kun den del af en matchende linje, der passer til PATTERN.
–label=LABEL Viser input, der faktisk kommer fra standardinput, som input, der kommer fra filen LABEL. Dette er især nyttigt for værktøjer som zgrep, f.eks. gzip -cd foo.gz |grep -H –label=foo noget
–line-buffered Brug linebuffered. Dette kan medføre en ydelsesforringelse.
-q, –quiet, –silent Være stille; skriv ikke noget til standardudgangen. Afslut straks med status nul, hvis der findes et match, selv om der blev fundet en fejl. Se også indstillingen -s eller –no-messages.
-R, -r, –recursive Læs alle filer under hver mappe, rekursivt; dette svarer til indstillingen -d recurse. Ændret ved:
–include=PATTERN
Forsøg kun i mapper og søg kun efter filer, der matcher PATTERN.
–exclude=PATTERN
Forsøg i mapper og springe filer, der matcher PATTERN.
-s, –no-messages Undertrykker fejlmeddelelser om ikke-eksisterende eller ulæselige filer. Note om overførbarhed: i modsætning til GNU grep var traditionelt grep ikke i overensstemmelse med POSIX.2, fordi traditionelt grep manglede en -q-indstilling, og dets -s indstilling opførte sig som GNU greps -q-indstilling. Shellskripter, der er beregnet til at være overførbare til traditionelt grep, bør undgå både -q og -s og bør i stedet omdirigere output til /dev/null.
-U, –binary Behandler filen/filerne som binære filer. Som standard gætter grep under MS-DOS og Microsoft Windows på filtypen ved at se på indholdet af de første 32 KB, der læses fra filen. Hvis grep beslutter, at filen er en tekstfil, fjerner den CR-tegnene fra det oprindelige filindhold (for at få regulære udtryk med ^ og $ til at fungere korrekt). Angivelse af -U tilsidesætter dette gætværk og får alle filer til at blive læst og videregivet ordret til den matchende mekanisme; hvis filen er en tekstfil med CR/LF-par i slutningen af hver linje, får dette nogle regulære udtryk til at mislykkes. Denne indstilling har ingen virkning på andre platforme end MS-DOS og MS-Windows.
-u, –unix-byte-offsets Rapportere byte-offsets i Unix-stil. Denne indstilling får grep til at rapportere byte-offsets, som om filen var en tekstfil i Unix-stil, dvs. med CR-tegn fjernet. Dette giver samme resultat som at køre grep på en Unix-maskine. Denne indstilling har ingen virkning, medmindre -b-indstillingen også anvendes; den har ingen virkning på andre platforme end MS-DOS og MS-Windows.
-V, –version Udskriver versionsnummeret af grep til standardfejl. Dette versionsnummer skal medtages i alle fejlrapporter (se nedenfor).
-v, –invert-match Invertér betydningen af matchning, for at vælge linjer, der ikke matcher.
-w, –word-regexp Selekter kun de linjer, der indeholder matches, der danner hele ord. Testen er, at den matchende delstreng enten skal være i begyndelsen af linjen eller være forudgået af et tegn, der ikke er en ordbestanddel. På samme måde skal den enten ligge i slutningen af linjen eller være efterfulgt af et tegn, der ikke er en ordbestanddel. Ordkonstituerende tegn er bogstaver, cifre og understregningstegn.
-x, –line-regexp Selekter kun de match, der passer nøjagtigt til hele linjen.
-y Obsolut synonym for -i.
-Z, –null Udskriv en nulbyte (ASCII NULL-tegnet) i stedet for det tegn, der normalt følger efter et filnavn. F.eks. udsender grep -lZ en nul-byte efter hvert filnavn i stedet for den sædvanlige newline. Denne indstilling gør output entydigt, selv i tilfælde af filnavne, der indeholder usædvanlige tegn som f.eks. newlines. Denne indstilling kan bruges sammen med kommandoer som find -print0, perl -0, sort -z og xargs -0 til at behandle vilkårlige filnavne, selv dem, der indeholder newline-tegn.

Regulære udtryk

Et regulært udtryk er et mønster, der beskriver et sæt af strenge. Regulære udtryk konstrueres analogt med aritmetiske udtryk ved hjælp af forskellige operatorer til at kombinere mindre udtryk.

Grep forstår to forskellige versioner af syntaksen for regulære udtryk: “basic” og “extended”. I GNU grep er der ingen forskel i den tilgængelige funktionalitet ved brug af begge syntakser. I andre implementeringer er grundlæggende regulære udtryk mindre effektive. Den følgende beskrivelse gælder for udvidede regulære udtryk, som bruges i egrep; forskelle for grundlæggende regulære udtryk er opsummeret bagefter.

De grundlæggende byggeklodser er de regulære udtryk, der matcher et enkelt tegn. De fleste tegn, herunder alle bogstaver og cifre, er regulære udtryk, der matcher sig selv. Ethvert metategn med særlig betydning kan anføres ved at sætte en skråstreg foran det.

Et parentesudtryk er en liste af tegn omsluttet af . Det passer til ethvert enkelt tegn i listen; hvis det første tegn i listen er caret ^, passer det til ethvert tegn, der ikke er på listen. Det regulære udtryk passer f.eks. til ethvert enkelt ciffer.

Inden for et parentesudtryk består et intervaludtryk af to tegn, der er adskilt af en bindestreg (“-“). Det passer til ethvert enkelt tegn, der sorterer mellem de to tegn, inklusive, ved hjælp af stedets kollateringssekvens og tegnsæt. I standardlokalkode C svarer det f.eks. til . Mange sproglokaler sorterer tegn i ordbogsrækkefølge, og i disse sproglokaler svarer det ofte ikke til ; det kan f.eks. svare til ,. Hvis du vil opnå den traditionelle fortolkning af parentesudtryk, kan du bruge C-stemasætningen ved at indstille miljøvariablen LC_ALL til værdien C.

Finalt er visse navngivne tegnklasser foruddefineret i parentesudtryk, som følger. Deres navne er selvforklarende, og de er , , , , , , , , , , , , , , og . F.eks. betyder ] , bortset fra at sidstnævnte form afhænger af C-lokalkode og ASCII-tegnkodning, hvorimod førstnævnte er uafhængig af lokalkode og tegnsæt. (Bemærk, at parenteserne i disse klassebetegnelser er en del af de symbolske navne og skal medtages ud over de parenteser, der afgrænser parenteslisten). De fleste metakendetegn mister deres særlige betydning inden for lister. Hvis du vil inkludere et bogstaveligt ], skal du placere det først i listen. På samme måde skal et bogstaveligt ^ placeres hvor som helst, men ikke først. Endelig, for at inkludere et bogstav – placerer du det sidst.

Punktet . passer til ethvert enkelt tegn. Symbolet \w er et synonym for ], og \W er et synonym for ].

Den karet ^ og dollartegnet (“$”) er metakendetegn, der henholdsvis matcher den tomme streng i begyndelsen og slutningen af en linje. Symbolerne \< og \> matcher henholdsvis den tomme streng i begyndelsen og slutningen af et ord. Symbolet \b matcher den tomme streng i kanten af et ord, og \B matcher den tomme streng, forudsat at den ikke er i kanten af et ord.

Et regulært udtryk kan efterfølges af en af flere gentagelsesoperatorer:

? Det foregående element er valgfrit og matches højst én gang.
* Det foregående element matches nul eller flere gange.
+ Det foregående element matches én eller flere gange.
{n} Det foregående punkt matches præcis n gange.
{n,} Det foregående punkt matches n eller flere gange.
{n,m} Det foregående element er matchet mindst n gange, men ikke mere end m gange.

To regulære udtryk kan sammenkædes; det resulterende regulære udtryk matcher enhver streng, der dannes ved at sammenkæde to understrenge, der henholdsvis matcher de sammenkædede underudtryk.

To regulære udtryk kan sammenføjes med infix-operatoren |; det resulterende regulære udtryk matcher enhver streng, der matcher et af deludtrykkene.

Repetition har forrang frem for sammenkædning, som igen har forrang frem for alternation. Et helt underudtryk kan omsluttes af parenteser for at tilsidesætte disse præcedensregler.

Bagreference \n, hvor n er et enkelt ciffer, passer til den delstreng, der tidligere er matchet af det niende parenteserede underudtryk i det regulære udtryk.

I grundlæggende regulære udtryk mister metategnene ?, +, {, |, ( og ) deres særlige betydning; i stedet skal du bruge de bagudskrevne versioner \?, \+, \{, \|, \|, \( og \).

Traditionel egrep understøttede ikke metategnet {, og nogle egrep-implementeringer understøtter \{ i stedet, så bærbare scripts bør undgå { i egrep-mønstre og bør bruge til at matche et bogstaveligt {.

GNU egrep forsøger at understøtte traditionel brug ved at antage, at { ikke er speciel, hvis det ville være starten på en ugyldig intervalspecifikation. For eksempel søger shell-kommandoen egrep ‘{1’ efter den to-tegnede streng {1 i stedet for at rapportere en syntaksfejl i det regulære udtryk. POSIX.2 tillader denne opførsel som en udvidelse, men bærbare scripts bør undgå den.

Miljøvariabler

Greps opførsel påvirkes af følgende miljøvariabler:

En locale LC_foo specificeres ved at undersøge de tre miljøvariabler LC_ALL, LC_foo, LANG, i den rækkefølge. Den første af disse variabler, der er indstillet, angiver lokalområdet. Hvis f.eks. LC_ALL ikke er indstillet, men LC_MESSAGES er indstillet til pt_BR, anvendes brasiliansk portugisisk som LC_MESSAGES-lokationskode. C-stemasætningen anvendes, hvis ingen af disse miljøvariabler er indstillet, eller hvis lokalitetskataloget ikke er installeret, eller hvis grep ikke blev kompileret med national sprogunderstøttelse (NLS).

GREP_OPTIONS

Denne variabel angiver standardindstillinger, der skal placeres foran eventuelle eksplicitte indstillinger. Hvis GREP_OPTIONS f.eks. er ‘–binary-files=without-match –directories=skip’, opfører grep sig som om de to indstillinger –binary-files=without-match og –directories=skip var blevet angivet før alle eksplicitte indstillinger. Specifikationer af indstillinger er adskilt af mellemrum. En backslash undslipper det næste tegn, så den kan bruges til at angive en indstilling, der indeholder whitespace eller en backslash.

GREP_COLOR

Angiver markeringen til fremhævning.

LC_ALL, LC_COLLATE, LANG

Disse variabler angiver LC_COLLATE-regiområdet, som bestemmer den kollateringssekvens, der bruges til at fortolke intervaludtryk som .

LC_ALL, LC_CTYPE, LANG

Disse variabler angiver LC_CTYPE-regiområdet, som bestemmer typen af tegn, f.eks, hvilke tegn der er whitespace.

LC_ALL, LC_MESSAGES, LANG

Disse variabler angiver LC_MESSAGES-området, som bestemmer det sprog, som grep bruger til meddelelser. Standardlokalekursen i C bruger amerikanske engelske meddelelser.

POSIXLY_CORRECT

Hvis den er indstillet, opfører grep sig som POSIX.2 kræver; ellers opfører grep sig mere som andre GNU-programmer. POSIX.2 kræver, at indstillinger, der følger efter filnavne, skal behandles som filnavne; som standard bliver sådanne indstillinger permuteret til forsiden af operandlisten og behandles som indstillinger. POSIX.2 kræver også, at ikke-genkendte indstillinger skal diagnosticeres som “ulovlige”, men da de ikke rigtig er imod loven, er standardindstillingen at diagnosticere dem som “ugyldige”. POSIXLY_CORRECT deaktiverer også _N_GNU_nonoption_argv_flags_, som beskrives nedenfor.

_N_GNU_nonoption_argv_flags_

(Her er N greps numeriske proces-ID.) Hvis det i-te tegn i denne miljøvariabels værdi er 1, skal du ikke betragte den i-te operand i grep som en option, selv om den ser ud til at være en. En shell kan sætte denne variabel i miljøet for hver kommando, den kører, og angive hvilke operander der er resultatet af filnavnets wildcard-udvidelse og derfor ikke skal behandles som optioner. Denne adfærd er kun tilgængelig med GNU C-biblioteket, og kun når POSIXLY_CORRECT ikke er indstillet.

Eksempler

egrep "support|help|windows" myfile.txt

Søg efter mønstre af support hjælp og vinduer i filen myfile.txt.

egrep '^+$' myfile.txt

Match alle linjer i myfile.txt, som begynder en linje med et alfabetisk ord, der også afslutter linjen.

egrep -c '^begin|end$' myfile.txt

Tæl antallet af linjer i myfile.txt, der begynder med ordet “begin” eller slutter med ordet “end”.

fgrep – Filtrerer tekst, der passer til en streng af faste tegn.
grep – Filtrerer tekst, der passer til et regulært udtryk.
sed – Et hjælpeprogram til filtrering og transformation af tekst.
sh – Bourne-shell-kommandointerpreter.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.