grep(1)
GREP(1) — Användarkommandon
NAMN
grep – skriv ut rader som matchar mönster
SYNOPSIS
grep [ALTERNATIV]... MÖNSTER [FIL]... grep [ALTERNATIV]... -e MÖNSTER ... [FIL]... grep [ALTERNATIV]... -f MÖNSTERFIL ... [FIL]...
BESKRIVNING
grep söker efter mönster i varje FIL. I synopsisens första form, som används om inga alternativen -e eller -f finns, är första operanden MÖNSTER ett eller flera mönster separerade med nyradstecken, och grep skriver ut varje rad som matchar ett mönster. Vanligtvis bör MÖNSTER citeras (t.ex. med enkla citattecken) när grep används i ett skalkommando.
En FIL som är ”-” betyder standard in. Om ingen FIL anges, undersöker rekursiva sökningar arbetskatalogen, och icke-rekursiva sökningar läser standard in.
ALTERNATIV
Generell programinformation
--help
- Skriv ut ett användningsmeddelande och avsluta.
-V, --version
- Skriv ut versionsnumret för grep och avsluta.
Mönstersyntax
-E, --extended-regexp
- Tolka MÖNSTER som utökade reguljära uttryck (ERE; se nedan).
-F, --fixed-strings
- Tolka MÖNSTER som fasta strängar, inte reguljära uttryck.
-G, --basic-regexp
- Tolka MÖNSTER som grundläggande reguljära uttryck (BRE; se nedan). Detta är standard.
-P, --perl-regexp
- Tolka MÖNSTER som Perl-kompatibla reguljära uttryck (PCRE). Detta alternativ är experimentellt i kombination med alternativet -z (--null-data), och grep -P kan varna om ej implementerade funktioner.
Matchningsstyrning
-e MÖNSTER, --regexp='MÖNSTER
- Använd MÖNSTER som mönster. Om alternativet används flera gånger eller kombineras med alternativet -f (--file), sök efter alla angivna mönster. Detta alternativ kan användas för att skydda ett mönster som börjar med ”-”.
-f FIL, --file='FIL
- Hämta mönster från FIL, ett per rad. Om alternativet används flera gånger eller kombineras med alternativet -e (--regexp), sök efter alla angivna mönster. Den tomma filen innehåller noll mönster och matchar därför ingenting. Om FIL är -, läs mönster från standard in.
-i, --ignore-case
- Ignorera skillnader i versaler/gemener i mönster och indata, så att tecken som bara skiljer sig i skiftläge matchar varandra.
--no-ignore-case
- Ignorera inte skillnader i versaler/gemener i mönster och indata. Detta är standard. Alternativet är användbart för att skicka till skalskript som redan använder -i, för att upphäva effekten eftersom de två alternativen åsidosätter varandra.
-v, --invert-match
- Invertera matchningen för att välja icke-matchande rader.
-w, --word-regexp
- Välj endast rader som innehåller träffar som utgör hela ord. Testet är att den matchande delsträngen antingen måste vara i början av raden, eller föregås av ett icke-ord-konstituerande tecken. På motsvarande sätt måste den antingen vara i slutet av raden eller följas av ett icke-ord-konstituerande tecken. Ord-konstituerande tecken är bokstäver, siffror och understreck. Detta alternativ har ingen effekt om även -x anges.
-x, --line-regexp
- Välj endast träffar som exakt matchar hela raden. För ett reguljärt uttryck är detta som att sätta parenteser runt mönstret och sedan omge det med ^ och $.
Allmän utdata-styrning
-c, --count
- Undertryck normal utdata; skriv i stället ut ett antal matchande rader för varje indatafil. Med alternativet -v (--invert-match) räknas i stället icke-matchande rader.
--color[='NÄR], --colour[='NÄR]
- Omslut matchade (icke-tomma) strängar, matchande rader, kontextrader, filnamn, radnummer, byte-offset och avgränsare (för fält och grupper av kontextrader) med escape-sekvenser för att visa dem i färg i terminalen. Färgerna definieras av miljövariabeln GREP_COLORS. NÄR är never, always eller auto.
-L, --files-without-match
- Undertryck normal utdata; skriv i stället ut namnet på varje indatafil som normalt inte skulle ha gett någon utdata.
-l, --files-with-matches
- Undertryck normal utdata; skriv i stället ut namnet på varje indatafil som normalt skulle ha gett utdata. Skanningen av varje indatafil stoppas vid första matchningen.
-m ANTAL, --max-count='ANTAL
- Sluta läsa en fil efter ANTAL matchande rader. Om ANTAL är noll, stoppar grep direkt utan att läsa indata. Ett ANTAL på -1 behandlas som oändlighet och grep stannar inte; detta är standard. Om indata är standard in från en vanlig fil, och ANTAL matchande rader skrivs ut, säkerställer grep att standard in positioneras precis efter den sista matchande raden innan avslut, oavsett förekomst av efterföljande kontextrader. Detta gör att en anropande process kan återuppta en sökning. När grep stannar efter ANTAL matchande rader skriver den ut eventuella efterföljande kontextrader. När även -c eller --count används, skriver grep inte ut ett antal större än ANTAL. När även -v eller --invert-match används, stoppar grep efter att ha skrivit ut ANTAL icke-matchande rader.
-o, --only-matching
- Skriv bara ut de matchade (icke-tomma) delarna av en matchande rad, där varje sådan del skrivs på en separat utrad.
-q, --quiet, --silent
- Tyst; skriv inget till standard ut. Avsluta omedelbart med status noll om någon matchning hittas, även om ett fel upptäcktes. Se även alternativet -s eller --no-messages.
-s, --no-messages
- Undertryck felmeddelanden om filer som inte finns eller inte kan läsas.
Styrning av radprefix i utdata
-b, --byte-offset
- Skriv 0-baserad byte-offset inom indatafilen före varje utrad. Om -o (--only-matching) anges, skriv offset för själva matchade delen.
-H, --with-filename
- Skriv filnamnet för varje matchning. Detta är standard när det finns fler än en fil att söka i. Detta är en GNU-utökning.
-h, --no-filename
- Undertryck prefix med filnamn i utdata. Detta är standard när det bara finns en fil (eller bara standard in) att söka i.
--label='ETIKETT
- Visa indata som faktiskt kommer från standard in som om den kom från filen ETIKETT. Detta kan vara användbart för kommandon som transformerar en fils innehåll före sökning, t.ex.:
gzip -cd foo.gz | grep --label=foo -H 'något mönster'
- Se även alternativet -H.
-n, --line-number
- Prefixa varje utrad med 1-baserat radnummer inom sin indatafil.
-T, --initial-tab
- Säkerställ att första tecknet i faktiskt radinnehåll ligger på en tabbstopp, så att tabbjustering ser normal ut. Detta är användbart med alternativ som prefixar utdata till innehållet: -H, -n och -b. För att förbättra sannolikheten att rader från en enskild fil börjar i samma kolumn, gör detta också att radnummer och byte-offset (om de finns) skrivs i ett minsta fältbredd.
-Z, --null
- Skriv en nollbyte (ASCII-tecknet NUL) i stället för tecknet som normalt följer efter ett filnamn. Exempelvis skriver grep -lZ en nollbyte efter varje filnamn i stället för den vanliga nyraden. Detta gör utdata entydig även om filnamn innehåller ovanliga tecken som nyrader. Alternativet kan användas med kommandon som find -print0, perl -0, sort -z och xargs -0 för att hantera godtyckliga filnamn, även sådana som innehåller nyradstecken.
Styrning av kontextrader
-A ANTAL, --after-context='ANTAL
- Skriv ANTAL rader efterföljande kontext efter matchande rader. Placerar en rad med gruppavgränsare (--) mellan sammanhängande grupper av träffar. Med -o eller --only-matching har detta ingen effekt och en varning ges.
-B ANTAL, --before-context='ANTAL
- Skriv ANTAL rader föregående kontext före matchande rader. Placerar en rad med gruppavgränsare (--) mellan sammanhängande grupper av träffar. Med -o eller --only-matching har detta ingen effekt och en varning ges.
-C ANTAL, - ANTAL, --context='ANTAL
- Skriv ANTAL rader kontext i utdata. Placerar en rad med gruppavgränsare (--) mellan sammanhängande grupper av träffar. Med -o eller --only-matching har detta ingen effekt och en varning ges.
--group-separator='SEP
- När -A, -B eller -C används, skriv SEP i stället för -- mellan grupper av rader.
--no-group-separator
- När -A, -B eller -C används, skriv ingen avgränsare mellan grupper av rader.
Fil- och katalogval
-a, --text
- Behandla en binär fil som om den vore text; detta motsvarar alternativet --binary-files=text.
--binary-files='TYP
- Om en fils data eller metadata indikerar att filen innehåller binärdata, anta att filen är av typen TYP. Icke-text-bytes indikerar binärdata; dessa är antingen utdatabytes som är felaktigt kodade för aktuell locale, eller nollbytes i indata när alternativet -z inte används.
- Som standard är TYP binary, och grep undertrycker utdata efter att nollbyte-binärdata i indata har upptäckts, och undertrycker utrar som innehåller felaktigt kodad data. När någon utdata undertrycks följer grep upp med ett meddelande till standard fel som säger att en binär fil matchar.
- Om TYP är without-match, antar grep när den upptäcker nollbytes-binärdata att resten av filen inte matchar; detta motsvarar alternativet -I.
- Om TYP är text, behandlar grep en binär fil som om den vore text; detta motsvarar alternativet -a.
- När TYP är binary, kan grep behandla icke-text-bytes som radavslut även utan alternativet -z. Detta innebär att valet binary kontra text kan påverka om ett mönster matchar en fil. Exempelvis kan, när TYP är binary, mönstret
q$matchaqföljt direkt av en nollbyte, även om detta inte matchas när TYP är text. Omvänt kan, när TYP är binary, mönstret.(punkt) kanske inte matcha en nollbyte. - Varning: Alternativet -a kan skriva ut binärt skräp, vilket kan få otrevliga bieffekter om utdata går till en terminal och terminaldrivrutinen tolkar delar av det som kommandon. Å andra sidan, när man läser filer vars textkodningar är okända kan det vara hjälpsamt att använda -a eller sätta LC_ALL='C' i miljön, för att hitta fler matchningar även om matchningarna är osäkra att visa direkt.
-D ÅTGÄRD, --devices='ÅTGÄRD
- Om en indatafil är en enhet, FIFO eller socket, använd ÅTGÄRD för att hantera den. Som standard är ÅTGÄRD read, vilket betyder att enheter läses som vanliga filer. Om ÅTGÄRD är skip, hoppas enheter tyst över.
-d ÅTGÄRD, --directories='ÅTGÄRD
- Om en indatafil är en katalog, använd ÅTGÄRD för att hantera den. Som standard är ÅTGÄRD read, dvs. läs kataloger som om de vore vanliga filer. Om ÅTGÄRD är skip, hoppas kataloger tyst över. Om ÅTGÄRD är recurse, läs alla filer under varje katalog rekursivt, och följ symboliska länkar endast om de står på kommandoraden. Detta motsvarar alternativet -r.
--exclude='GLOB
- Hoppa över en kommandoradsfil vars namnsuffix matchar mönstret GLOB med jokerteckenmatchning; ett namnsuffix är antingen hela namnet, eller en efterföljande del som börjar med ett icke-snedstreck-tecken direkt efter ett snedstreck ('/) i namnet. Vid rekursiv sökning: hoppa över varje underfil vars basnamn matchar GLOB; basnamnet är delen efter sista snedstrecket. Ett mönster kan använda *, ? och []...'] som jokertecken, och ' för att citera ett jokertecken eller omvänt snedstreck bokstavligt.
--exclude-from='FIL
- Hoppa över filer vars basnamn matchar något av filnamnsglobbarna som läses från FIL (med jokerteckenmatchning enligt --exclude).
--exclude-dir='GLOB
- Hoppa över en kommandoradskatalog vars namnsuffix matchar GLOB. Vid rekursiv sökning: hoppa över varje underkatalog vars basnamn matchar GLOB. Ignorera redundanta avslutande snedstreck i GLOB.
-I
- Behandla en binär fil som om den inte innehöll matchande data; detta motsvarar alternativet --binary-files=without-match.
--include='GLOB
- Sök endast i filer vars basnamn matchar GLOB (med jokerteckenmatchning enligt --exclude). Om motstridiga alternativ --include och --exclude anges, vinner det som matchar sist. Om inget --include eller --exclude matchar, inkluderas en fil om inte det första sådana alternativet är --include.
-r, --recursive
- Läs alla filer under varje katalog rekursivt och följ symboliska länkar endast om de står på kommandoraden. Observera att om ingen filoperand anges, söker grep i arbetskatalogen. Detta motsvarar alternativet -d recurse.
-R, --dereference-recursive
- Läs alla filer under varje katalog rekursivt. Följ alla symboliska länkar, till skillnad från -r.
Övriga alternativ
--line-buffered
- Använd radbuffring för utdata. Detta kan ge en prestandastraff.
-U, --binary
- Behandla fil(er) som binära. Som standard, under MS-DOS och MS-Windows, gissar grep om en fil är text eller binär enligt beskrivningen för alternativet --binary-files. Om grep bedömer filen som text, tar den bort CR-tecken från originalinnehållet (för att reguljära uttryck med ^ och $ ska fungera korrekt). Att ange -U åsidosätter gissningen, så att alla filer läses och skickas vidare till matchningsmekanismen exakt som de är; om filen är en textfil med CR/LF-par i slutet av varje rad kan detta göra att vissa reguljära uttryck misslyckas. Detta alternativ har ingen effekt på andra plattformar än MS-DOS och MS-Windows.
-z, --null-data
- Behandla in- och utdata som sekvenser av rader, där varje rad avslutas av en nollbyte (ASCII NUL) i stället för en nyrad. Liksom -Z eller --null kan detta användas med kommandon som sort -z för att hantera godtyckliga filnamn.
REGULJÄRA UTTRYCK
Ett reguljärt uttryck är ett mönster som beskriver en mängd strängar. Reguljära uttryck konstrueras analogt med aritmetiska uttryck genom att använda operatorer för att kombinera mindre uttryck.
grep förstår tre olika varianter av syntax för reguljära uttryck: ”basic” (BRE), ”extended” (ERE) och ”perl” (PCRE). I GNU grep är grundläggande och utökade reguljära uttryck i praktiken olika notationer för samma mönstermatchningsfunktionalitet. I andra implementationer är grundläggande reguljära uttryck ofta mindre kraftfulla än utökade, även om det ibland kan vara tvärtom. Beskrivningen nedan gäller utökade reguljära uttryck; skillnader för grundläggande reguljära uttryck sammanfattas efteråt. Perl-kompatibla reguljära uttryck har annan funktionalitet och dokumenteras i pcre2syntax(3) och pcre2pattern(3), men fungerar bara om PCRE-stöd är aktiverat.
De grundläggande byggstenarna är reguljära uttryck som matchar ett enda tecken. De flesta tecken, inklusive alla bokstäver och siffror, är reguljära uttryck som matchar sig själva. Alla metatecken med specialbetydelse kan citeras genom att föregås av ett omvänt snedstreck.
Punkten . matchar vilket enstaka tecken som helst. Det är ospecificerat om den matchar ett kodningsfel.
Teckenklasser och hakparentesuttryck
Ett hakparentesuttryck är en lista av tecken omslutna av [ och ]. Det matchar vilket enstaka tecken som helst i listan. Om listans första tecken är cirkumflex ^, matchar det vilket tecken som helst som inte finns i listan; det är ospecificerat om det matchar ett kodningsfel. Exempel: det reguljära uttrycket [0123456789] matchar vilken enstaka siffra som helst.
Inuti ett hakparentesuttryck består ett intervalluttryck av två tecken separerade av ett bindestreck. I standard-C-locale matchar det vilket enstaka tecken som helst som ligger mellan de två tecknen i ASCII-ordning, inklusive ändpunkterna. Exempel: [a-d] är ekvivalent med [abcd]. I andra locales är beteendet ospecificerat: [a-d] kan vara ekvivalent med [abcd] eller [aBbCcDd] eller något annat hakparentesuttryck, eller misslyckas med att matcha något tecken, eller matcha en oregelbunden mängd tecken, eller vara ogiltigt. För att få den traditionella tolkningen kan du använda C-locale genom att sätta miljövariabeln LC_ALL till värdet C.
Slutligen är vissa namngivna teckenklasser fördefinierade inom hakparenteser. Namnen är självförklarande och är: [:alnum:], [:alpha:], [:blank:], [:cntrl:], [:digit:], [:graph:], [:lower:], [:print:], [:punct:], [:space:], [:upper:] och [:xdigit:]. Exempel: alnum: betyder teckenklassen av siffror och bokstäver i aktuell locale. I C-locale och ASCII-kodning är detta samma som [0-9A-Za-z]. (Observera att hakparenteserna i dessa klassnamn är del av de symboliska namnen, och måste inkluderas utöver hakparenteserna som avgr