Linux egrep-kommando

Uppdaterad: På Unix-liknande operativsystem söker egrep-kommandot efter ett textmönster med hjälp av utökade reguljära uttryck för att utföra matchningen. Att köra egrep motsvarar att köra grep med alternativet -E.

Denna sida täcker GNU/Linux-versionen av egrep.

Syntax

egrep PATTERN 

Optioner

-A NUM,
–after-context=NUM
Uttryck NUM rader av avslutande sammanhang efter matchande rader. Placerar en rad som innehåller — mellan sammanhängande grupper av matchningar.
-a, –text Behandlar en binär fil som om den vore text; detta är likvärdigt med alternativet –binary-files=text.
-B NUM,
–fore-context=NUM
Utskrift av NUM rader med ledande kontext före matchningsrader. Placerar en rad som innehåller — mellan sammanhängande grupper av matchningar.
-C NUM, –context=NUM Skriv ut NUM rader av utdatakontext. Placerar en rad som innehåller — mellan sammanhängande grupper av träffar.
-b, –byte-offset Skriv ut byteoffset i inmatningsfilen före varje utdatarad.
–binary-files=TYPE Om de första bytena i en fil indikerar att filen innehåller binära data, antar du att filen är av typen TYPE. Som standard är TYPE binär, och grep ger normalt ut antingen ett enradigt meddelande om att en binär fil matchar, eller inget meddelande om det inte finns någon matchning. Om TYPE är without-match antar grep att en binär fil inte matchar; detta motsvarar alternativet -I. Om TYPE är text behandlar grep en binär fil som om den vore text; detta motsvarar alternativet -a. Varning: grep –binary-files=text kan ge ut binärt skräp, vilket kan få obehagliga bieffekter om utgången är en terminal och om terminaldrivrutinen tolkar en del av det som kommandon.
–colour,
–color
Urringa den matchande strängen med markeringen find in GREP_COLOR miljövariabel. WHEN kan vara ”never”, ”always” eller ”auto”
-c, –count Undertrycka normal utmatning; skriv i stället ut ett antal matchande rader för varje inmatningsfil. Med alternativet -v, –invert-match (se nedan), räkna linjer som inte stämmer.
-D ACTION,
–devices=ACTION
Om en inmatningsfil är en enhet, FIFO eller socket, använd ACTION för att behandla den. Som standard är ACTION läst, vilket innebär att enheter läses som om de vore vanliga filer. Om ACTION är skip, överhoppas enheterna tyst.
-d ACTION,
–directories=ACTION
Om en inmatningsfil är en katalog, använd ACTION för att bearbeta den. Som standard är ACTION läst, vilket innebär att kataloger läses som om de vore vanliga filer. Om ACTION är skip, överhoppas kataloger tyst. Om ACTION är recurse läser grep alla filer under varje katalog, rekursivt; detta motsvarar alternativet -r.
-e PATTERN,
–regexp=PATTERN
Använd PATTERN som mönster; användbart för att skydda mönster som börjar med ”-”.
-F, –fixed-strings Tolka PATTERN som en lista med fasta strängar, separerade med nya rader, som kan matchas.
-P, –perl-regexp Tolka PATTERN som ett reguljärt uttryck i Perl.
-f FILE, –file=FILE Hämta mönster från FILE, ett per rad. Den tomma filen innehåller inga mönster och matchar därför ingenting.
-G, –basic-regexp Tolka PATTERN som ett grundläggande reguljärt uttryck (se nedan). Detta är standardinställningen.
-H, –with-filename Skriv ut filnamnet för varje träff.
-h, –no-filename Undertrycka prefixering av filnamn på utdata när flera filer söks.
–help Utsänd ett kort hjälpmeddelande.
-I Behandla en binär fil som om den inte innehöll matchande data; detta motsvarar alternativet –binary-files=without-match.
-i, –ignore-case Ignorera skillnader i stor- och små bokstavsbeteckningar i både PATTERN- och inmatningsfiler.
-L,
–files-without-match
Undertrycker normal utmatning; i stället skrivs namnet på varje inmatningsfil från vilken ingen utmatning normalt skulle skrivas ut. Skanningen stannar vid den första matchningen.
-l, –files-with-matches Undertrycka normal utmatning; skriv i stället ut namnet på varje indatafil från vilken utdata normalt skulle skrivas ut. Skanningen stannar vid den första matchningen.
-m NUM,
–max-count=NUM
Sluta läsa en fil efter NUM matchande rader. Om indata är standardinmatning från en vanlig fil och NUM matchande rader skrivs ut, ser grep till att standardinmatningen placeras efter den sista matchande raden innan det avslutas, oavsett om det finns efterföljande kontextrader. Detta gör det möjligt för en anropande process att återuppta en sökning. När grep slutar efter NUM matchande rader, skrivs alla efterföljande kontextrader ut. När alternativet -c eller –count också används, ger grep inte ut ett antal som är större än NUM. När alternativet -v eller –invert-match också används, stannar grep efter att ha skrivit ut NUM icke-matchande rader.
–mmap Om det är möjligt, använd systemanropet mmap för att läsa inmatning, istället för standardanropet read. I vissa situationer ger –mmap bättre prestanda. –mmap kan dock orsaka odefinierat beteende (inklusive core dumps) om en inmatningsfil krymper medan grep arbetar, eller om ett I/O-fel inträffar.
-n, –line-number Prefixera varje utmatningsrad med radnumret i dess inmatningsfil.
-o, –only-matching Visa endast den del av en matchande rad som matchar PATTERN.
–label=LABEL Visa indata som faktiskt kommer från standardinmatningen som indata som kommer från filen LABEL. Detta är särskilt användbart för verktyg som zgrep, t.ex. gzip -cd foo.gz |grep -H –label=foo något
–line-buffered Använd line buffering. Detta kan medföra en prestandaförlust.
-q, –quiet, –silent Var tyst; skriv inte något till standardutgången. Avsluta omedelbart med status noll om någon matchning hittas, även om ett fel upptäcktes. Se även alternativet -s eller –no-messages.
-R, -r, –recursive Läs alla filer under varje katalog, rekursivt; detta motsvarar alternativet -d recurse. Modifierat av:
–include=PATTERN
Sök i kataloger endast efter filer som matchar PATTERN.
–exclude=PATTERN
Sök i kataloger överhoppas fil som matchar PATTERN.
-s, –no-messages Undertrycka felmeddelanden om icke-existerande eller oläsbara filer. Notering om portabilitet: till skillnad från GNU grep var det traditionella grep inte förenligt med POSIX.2, eftersom det traditionella grep saknade ett -q-alternativ och dess -s-alternativ betedde sig som GNU greps -q-alternativ. Skalskript som är avsedda att vara portabla till traditionellt grep bör undvika både -q och -s och istället omdirigera utdata till /dev/null.
-U, –binary Behandla filen/filerna som binära. Som standard, under MS-DOS och Microsoft Windows, gissar grep filtypen genom att titta på innehållet i de första 32 KB som läses från filen. Om grep bestämmer sig för att filen är en textfil, tar den bort CR-tecknen från det ursprungliga filinnehållet (för att reguljära uttryck med ^ och $ ska fungera korrekt). Om du anger -U åsidosätter detta gissningsarbete, vilket gör att alla filer läses och skickas till matchningsmekanismen ordagrant; om filen är en textfil med CR/LF-par i slutet av varje rad gör detta att vissa reguljära uttryck misslyckas. Det här alternativet har ingen effekt på andra plattformar än MS-DOS och MS-Windows.
-u, –unix-byte-offsets Rapportera byteoffsets i Unix-stil. Den här växeln får grep att rapportera byteoffsets som om filen var en textfil i Unix-stil, dvs. med CR-tecken borttagna. Detta ger samma resultat som att köra grep på en Unix-maskin. Det här alternativet har ingen effekt om inte -b-alternativet också används; det har ingen effekt på andra plattformar än MS-DOS och MS-Windows.
-V, –version Skriv ut versionsnumret av grep till standardfel. Detta versionsnummer bör ingå i alla felrapporter (se nedan).
-v, –invert-match Invertera betydelsen av matchning, för att välja rader som inte matchar.
-w, –word-regexp Välja endast de rader som innehåller matchningar som bildar hela ord. Testet är att den matchande delsträngen antingen måste vara i början av raden eller föregås av ett tecken som inte är ett ord. På samma sätt måste den vara antingen i slutet av raden eller följas av ett tecken som inte utgör ett ord. Ordkonstituerande tecken är bokstäver, siffror och understreck.
-x, –line-regexp Välj endast de träffar som exakt matchar hela raden.
-y Obsolet synonym för -i.
-Z, –null Skriv ut en nollbyte (ASCII-teckenet NULL) i stället för det tecken som normalt följer efter ett filnamn. Exempelvis ger grep -lZ ut en nollbyte efter varje filnamn i stället för den vanliga nyraden. Det här alternativet gör utmatningen entydig, även i närvaro av filnamn som innehåller ovanliga tecken som newlines. Det här alternativet kan användas tillsammans med kommandon som find -print0, perl -0, sort -z och xargs -0 för att bearbeta godtyckliga filnamn, även sådana som innehåller newline-tecken.

Reguljära uttryck

Ett reguljärt uttryck är ett mönster som beskriver en uppsättning strängar. Reguljära uttryck konstrueras analogt med aritmetiska uttryck, med hjälp av olika operatörer för att kombinera mindre uttryck.

Grep förstår två olika versioner av syntaxen för reguljära uttryck: ”basic” och ”extended”. I GNU grep finns det ingen skillnad i tillgänglig funktionalitet när man använder båda syntaxerna. I andra implementationer är grundläggande reguljära uttryck mindre kraftfulla. Följande beskrivning gäller för utökade reguljära uttryck, som används i egrep; skillnader för grundläggande reguljära uttryck sammanfattas efteråt.

De grundläggande byggstenarna är de reguljära uttrycken som matchar ett enda tecken. De flesta tecken, inklusive alla bokstäver och siffror, är reguljära uttryck som matchar sig själva. Varje metatecken med speciell betydelse kan citeras genom att föregås av ett backslash.

Ett parentesuttryck är en lista med tecken som omges av . Det matchar varje enskilt tecken i listan; om det första tecknet i listan är en caret ^ så matchar det varje tecken som inte finns i listan. Det reguljära uttrycket matchar till exempel vilken enskild siffra som helst.

Inom ett parentesuttryck består ett intervalluttryck av två tecken som åtskiljs av ett bindestreck (”-”). Det matchar alla enskilda tecken som sorteras mellan de två tecknen, inklusive, med hjälp av lokalens kollateringssekvens och teckenuppsättning. I standardlokalspråket C motsvarar till exempel . Många språkversioner sorterar tecken i ordboksordning, och i dessa språkversioner är ofta inte likvärdigt med ; det kan till exempel vara likvärdigt med ,. För att få den traditionella tolkningen av parentesuttryck kan du använda lokalspråket C genom att ställa in miljövariabeln LC_ALL till värdet C.

Finally, vissa namngivna teckenklasser är fördefinierade inom parentesuttryck, enligt följande. Deras namn är självförklarande och de är , , , , , , , , , , , , , och . Till exempel betyder ] , med undantag för att den senare formen är beroende av C:s lokal och ASCII-teckenkodning, medan den förra är oberoende av lokal och teckenuppsättning. (Observera att parenteserna i dessa klassnamn är en del av de symboliska namnen och måste inkluderas utöver de parenteser som avgränsar parenteslistan). De flesta metatecken förlorar sin speciella betydelse inom listor. För att inkludera ett bokstavligt ] placera det först i listan. På samma sätt, för att inkludera ett bokstavligt ^ placera det var som helst utom först. Slutligen, för att inkludera ett bokstavligt – placera det sist.

Punkten . matchar vilket enskilt tecken som helst. Symbolen \w är en synonym för ] och \W är en synonym för ].

Karoten ^ och dollartecknet (”$”) är metatecken som matchar den tomma strängen i början respektive slutet av en rad. Symbolerna \< och \> matchar respektive den tomma strängen i början och slutet av ett ord. Symbolen \b matchar den tomma strängen vid kanten av ett ord, och \B matchar den tomma strängen förutsatt att den inte är vid kanten av ett ord.

Ett reguljärt uttryck kan följas av en av flera repetitionsoperatörer:

? Den föregående punkten är valfri och matchas högst en gång.
* Den föregående punkten matchas noll eller flera gånger.
+ Den föregående punkten matchas en eller flera gånger.
{n} Den föregående punkten matchas exakt n gånger.
{n,} Den föregående punkten matchas n eller fler gånger.
{n,m} Den föregående punkten matchas minst n gånger, men inte mer än m gånger.

Två reguljära uttryck kan sammankopplas; det resulterande reguljära uttrycket matchar varje sträng som bildas genom att sammankoppla två delsträngar som motsvarar de sammankopplade deluttrycken.

Två reguljära uttryck kan sammanfogas med infixoperatören |; det resulterande reguljära uttrycket matchar varje sträng som matchar ettdera deluttrycket.

Repetition har företräde framför concatenation, som i sin tur har företräde framför alternation. Ett helt deluttryck kan inneslutas i parenteser för att åsidosätta dessa företrädesregler.

Backreferensen \n, där n är en enskild siffra, matchar den delsträng som tidigare matchats av det n:e paranteserade deluttrycket i det reguljära uttrycket.

I grundläggande reguljära uttryck förlorar metatecknen ?, +, {, |, (, och ) sin speciella betydelse; använd istället de bakåtsträvande versionerna \?, \+, \{, \|, \( och \).

Traditionellt egrep hade inte stöd för metatecknet {, och vissa egrep-implementationer har stöd för \{ istället, så portabla skript bör undvika { i egrep-mönster och bör använda för att matcha ett bokstavligt {.

GNU egrep försöker stödja traditionellt användande genom att anta att { inte är speciellt om det skulle vara början på en ogiltig intervallspecifikation. Skalkommandot egrep ’{1’ söker till exempel efter strängen {1 med två tecken i stället för att rapportera ett syntaxfel i det reguljära uttrycket. POSIX.2 tillåter detta beteende som en utvidgning, men portabla skript bör undvika det.

Miljövariabler

Greps beteende påverkas av följande miljövariabler:

En locale LC_foo specificeras genom att undersöka de tre miljövariablerna LC_ALL, LC_foo, LANG, i den ordningen. Den första av dessa variabler som sätts anger språket. Om till exempel LC_ALL inte är inställd, men LC_MESSAGES är inställd på pt_BR, används brasiliansk portugisiska som lokal för LC_MESSAGES. Lokalspråket C används om ingen av dessa miljövariabler är inställd, eller om lokalspråkskatalogen inte är installerad, eller om grep inte kompilerades med stöd för nationella språk (NLS).

GREP_OPTIONS

Denna variabel specificerar standardalternativ som ska placeras framför eventuella explicita alternativ. Om GREP_OPTIONS till exempel är ”–binary-files=without-match –directories=skip” beter sig grep som om de två alternativen –binary-files=without-match och –directories=skip hade angetts före alla explicita alternativ. Alternativspecifikationerna separeras av vitrymder. Ett backslash undviker nästa tecken, så det kan användas för att ange ett alternativ som innehåller whitespace eller ett backslash.

GREP_COLOR

Specificerar markeringen för markering.

LC_ALL, LC_COLLATE, LANG

De här variablerna anger lokalsystemet LC_COLLATE, som bestämmer den kollateringssekvens som används för att tolka intervalluttryck som .

LC_ALL, LC_CTYPE, LANG

De här variablerna anger lokalsystemet LC_CTYPE, som bestämmer typen av tecken, t.ex, vilka tecken som är whitespace.

LC_ALL, LC_MESSAGES, LANG

De här variablerna anger lokalspråket LC_MESSAGES, som bestämmer vilket språk som grep använder för meddelanden. Standardlokalen C använder amerikanska engelska meddelanden.

POSIXLY_CORRECT

Om den är inställd beter sig grep som POSIX.2 kräver; annars beter sig grep mer som andra GNU-program. POSIX.2 kräver att alternativ som följer efter filnamn måste behandlas som filnamn; som standard permuteras sådana alternativ till början av operandlistan och behandlas som alternativ. POSIX.2 kräver också att oigenkända alternativ diagnostiseras som ”olagliga”, men eftersom de egentligen inte strider mot lagen är standardinställningen att diagnostisera dem som ”ogiltiga”. POSIXLY_CORRECT inaktiverar också _N_GNU_nonoption_argv_flags_, som beskrivs nedan.

_N_GNU_nonoption_argv_flags_

(Här är N greps numeriska process-id.) Om det tionde tecknet i den här miljövariabelns värde är 1, betrakta inte den tionde operanden i grep som ett alternativ, även om den ser ut att vara ett. Ett skal kan lägga den här variabeln i miljön för varje kommando som körs och ange vilka operander som är resultatet av filnamnets wildcard-expansion och därför inte ska behandlas som alternativ. Detta beteende är endast tillgängligt med GNU C-biblioteket och endast när POSIXLY_CORRECT inte är satt.

Exempel

egrep "support|help|windows" myfile.txt

Sök efter mönster av support help och windows i filen myfile.txt.

egrep '^+$' myfile.txt

Match alla rader i myfile.txt som börjar en rad med ett alfabetiskt ord som också avslutar raden.

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

Räkna antalet rader i myfile.txt som börjar med ordet ”begin” eller slutar med ordet ”end”.

fgrep – Filtrerar text som matchar en sträng med fasta tecken.
grep – Filtrerar text som matchar ett reguljärt uttryck.
sed – Ett verktyg för att filtrera och omvandla text.
sh – Kommandotolken för Bourne shell.

Lämna ett svar

Din e-postadress kommer inte publiceras.