Unix-szerű operációs rendszereken az egrep parancs egy szövegmintát keres, kiterjesztett reguláris kifejezéseket használva a megfeleltetéshez. Az egrep futtatása egyenértékű a grep futtatásával a -E kapcsolóval.
Ez az oldal az egrep GNU/Linux verziójával foglalkozik.
Szintaktika
egrep PATTERN
Options
-A NUM, –after-context=NUM |
NUM sornyi hátramaradt kontextust nyomtat a megfelelő sorok után. Az egybefüggő találati csoportok közé — tartalmazó sort helyez. |
-a, –text | Bináris fájl feldolgozása úgy, mintha szöveg lenne; ez egyenértékű a –binary-files=text kapcsolóval. |
-B NUM, –before-context=NUM |
NUM sornyi vezető kontextust nyomtat a találati sorok előtt. Egymással összefüggő találati csoportok közé — tartalmazó sort helyez. |
-C NUM, –context=NUM | NUM sornyi kimeneti kontextust nyomtat. Egybefüggő találatcsoportok közé —t tartalmazó sort helyez. |
-b, –byte-offset | A bemeneti fájlban a kimenet minden sora előtt a bájteltávolságot nyomtatja ki. |
–binary-files=TYPE | Ha egy fájl első néhány bájtja arra utal, hogy a fájl bináris adatokat tartalmaz, feltételezzük, hogy a fájl TYPE típusú. Alapértelmezés szerint a TYPE bináris, és a grep általában vagy egy egysoros üzenetet ad ki arról, hogy a bináris fájl egyezik, vagy nem ad ki üzenetet, ha nincs egyezés. Ha a TYPE értéke without-match, a grep feltételezi, hogy a bináris fájl nem egyezik; ez egyenértékű a -I kapcsolóval. Ha a TYPE text, a grep a bináris fájlt úgy dolgozza fel, mintha szöveg lenne; ez a -a opcióval egyenértékű. Figyelmeztetés: A grep –binary-files=text opció bináris szemetet adhat ki, aminek kellemetlen mellékhatásai lehetnek, ha a kimenet egy terminál, és ha a terminál vezérlő egyes részeit parancsként értelmezi. |
–colour, –color |
A megfelelő karakterláncot a GREP_COLOR környezeti változóban található jelölővel veszi körül. WHEN lehet ‘never’, ‘always’ vagy ‘auto’ |
-c, –count | Kikapcsolja a normál kimenetet; ehelyett kiírja a megfelelő sorok számát minden egyes bemeneti fájlhoz. A -v, –invert-match opcióval (lásd alább) megszámolja a nem egyező sorokat. |
-D ACTION, –devices=ACTION |
Ha a bemeneti fájl egy eszköz, FIFO vagy socket, használja az ACTION-t a feldolgozásához. Alapértelmezés szerint az ACTION read, ami azt jelenti, hogy az eszközök beolvasása úgy történik, mintha közönséges fájlok lennének. Ha az ACTION skip, akkor az eszközök némán kihagyásra kerülnek. |
-d ACTION, –directories=ACTION |
Ha a bemeneti fájl egy könyvtár, akkor az ACTION-t használja a feldolgozásához. Alapértelmezés szerint az ACTION read, ami azt jelenti, hogy a könyvtárakat úgy olvassa be, mintha közönséges fájlok lennének. Ha az ACTION értéke skip, akkor a könyvtárak némán kihagyásra kerülnek. Ha az ACTION recurse, akkor a grep minden könyvtár alatt rekurzívan beolvassa az összes fájlt; ez egyenértékű a -r kapcsolóval. |
-e PATTERN, –regexp=PATTERN |
Mintaként a PATTERN-t használja; hasznos a “-“-vel kezdődő minták védelmére. |
-F, –fixed-strings | A PATTERN-t a megfeleltethető, újsorral elválasztott fix karakterláncok listájaként értelmezi. |
-P, –perl-regexp | A PATTERN-t Perl reguláris kifejezésként értelmezi. |
-f FILE, –file=FILE | Minták kinyerése a FILE-ból, soronként egyet. Az üres fájl nulla mintát tartalmaz, ezért semmivel sem egyezik. |
-G, –basic-regexp | A PATTERN-t alapvető reguláris kifejezésként értelmezi (lásd alább). Ez az alapértelmezett. |
-H, –with-filename | Kiírja a fájl nevét minden egyes találathoz. |
-h, –no-filename | Kikapcsolja a fájlnevek előtagozását a kimeneten, ha több fájlt keres. |
–help | Kiad egy rövid súgóüzenetet. |
-I | Bináris fájl feldolgozása úgy, mintha nem tartalmazna megfelelő adatokat; ez egyenértékű a –binary-files=without-match opcióval. |
-i, –ignore-case | A nagy- és kisbetűs megkülönböztetés figyelmen kívül hagyása mind a PATTERN, mind a bemeneti fájlokban. |
-L, –files-without-match |
A normál kimenet elnyomása; ehelyett kiírja minden olyan bemeneti fájl nevét, amelyről normál esetben nem nyomtatna ki kimenetet. A beolvasás az első találatnál leáll. |
-l,–files-with-matches | A normál kimenet elnyomása; ehelyett minden olyan bemeneti fájl nevét kiírja, amelyből normális esetben kimenetet nyomtatna. A beolvasás az első egyezésnél leáll. |
-m NUM, –max-count=NUM |
NUM egyező sor után leállítja a fájl olvasását. Ha a bemenet egy reguláris fájl szabványos bemenete, és NUM egyező sor kerül kiadásra, a grep biztosítja, hogy a szabványos bemenet az utolsó egyező sor utánra kerüljön, mielőtt kilép, függetlenül a hátul lévő kontextus sorok jelenlététől. Ez lehetővé teszi a hívó folyamat számára a keresés folytatását. Ha a grep a NUM egyező sor után megáll, akkor minden hátramaradt kontextusvonalat kiad. Ha a -c vagy –count opciót is használjuk, a grep nem ad ki NUM-nál nagyobb számot. Ha a -v vagy –invert-match opciót is használjuk, a grep leáll a NUM nem egyező sorok kiadása után. |
–mmap | Ha lehetséges, használjuk az mmap rendszerhívást a bemenet olvasásához az alapértelmezett read rendszerhívás helyett. Bizonyos helyzetekben a –mmap jobb teljesítményt nyújt. A –mmap azonban meghatározatlan viselkedést okozhat (beleértve a magdömpinget is), ha a grep működése közben a bemeneti fájl zsugorodik, vagy ha I/O hiba lép fel. |
-n, –line-number | A kimenet minden sorát a bemeneti fájlon belüli sorszámmal jelöli. |
-o, –only-matching | A megfelelő sornak csak azt a részét jeleníti meg, amelyik megfelel a PATTERN-nek. |
–label=LABEL | A ténylegesen a standard bemenetről érkező bemenetet a LABEL fájlból érkező bemenetként jeleníti meg. Ez különösen hasznos az olyan eszközöknél, mint a zgrep, pl. gzip -cd foo.gz |grep -H –label=foo valami |
–line-buffered | Sorpufferelés használata. Ez teljesítménycsökkenéssel járhat. |
-q, –quiet, –silent | Legyen csendes; ne írjon semmit a standard kimenetre. Azonnal kilép nulla státusszal, ha bármilyen egyezést talál, még akkor is, ha hibát észlelt. Lásd még a -s vagy –no-messages opciót. |
-R, -r, –recursive | Minden könyvtár alatti összes fájl beolvasása rekurzívan; ez egyenértékű a -d recurse opcióval. Módosította: –include=PATTERN Könyvtárakban csak a PATTERN-nek megfelelő fájlt keresi. –exclude=PATTERN Könyvtárakban a PATTERN-nek megfelelő fájlt kihagyja. |
-s, –no-messages | A nem létező vagy nem olvasható fájlokra vonatkozó hibaüzenetek elhallgatása. Hordozhatósági megjegyzés: a GNU grep-től eltérően a hagyományos grep nem felelt meg a POSIX.2 szabványnak, mivel a hagyományos grep nem rendelkezett -q opcióval, és az -s opciója úgy viselkedett, mint a GNU grep -q opciója. A hagyományos grep-hez hordozhatónak szánt Shell szkripteknek kerülniük kell mind a -q, mind a -s opciót, és helyette a kimenetet a /dev/null-ra kell átirányítaniuk. |
-U, –binary | A fájl(ok) binárisként való kezelése. Alapértelmezés szerint MS-DOS és Microsoft Windows alatt a grep a fájl típusát a fájlból beolvasott első 32 KB tartalmának megnézésével találja ki. Ha a grep úgy dönt, hogy a fájl szöveges fájl, akkor eltávolítja a CR karaktereket az eredeti fájl tartalmából (hogy a ^ és $ típusú reguláris kifejezések helyesen működjenek). A -U megadása felülbírálja ezt a találgatást, és az összes fájlt szó szerint beolvassa és átadja a megfeleltetési mechanizmusnak; ha a fájl szöveges fájl, és minden sor végén CR/LF párok vannak, ez néhány reguláris kifejezés sikertelenségét okozza. Ennek az opciónak nincs hatása az MS-DOS és MS-Windows platformokon kívül. |
-u, –unix-byte-offsets | Unix-stílusú byte-offsets megjelenítése. Ez a kapcsoló azt eredményezi, hogy a grep úgy adja meg a bájteltolásokat, mintha a fájl Unix-stílusú szöveges fájl lenne, azaz a CR karakterek eltávolításával. Ez az eredmény megegyezik a grep Unix gépen történő futtatásával. Ennek a kapcsolónak nincs hatása, hacsak nem használjuk a -b kapcsolót is; nincs hatása az MS-DOS és MS-Windows platformokon kívül. |
-V, –version | A grep verziószámának kiírása a standard hibaüzenetre. Ezt a verziószámot minden hibajelentésnek tartalmaznia kell (lásd alább). |
-v, –invert-match | Invertálja az egyezés értelmét, hogy a nem egyező sorokat válassza ki. |
-w, –word-regexp | Csak azokat a sorokat válassza ki, amelyek egész szavakat alkotó egyezéseket tartalmaznak. A teszt az, hogy a megfelelő részláncnak vagy a sor elején kell állnia, vagy egy nem szóösszetevő karakternek kell megelőznie. Hasonlóképpen, vagy a sor végén kell állnia, vagy egy nem szóösszetevő karakternek kell követnie. Szóösszetevő karakterek a betűk, számjegyek és az aláhúzás. |
-x, –line-regexp | Kizárólag azokat az egyezéseket választja ki, amelyek pontosan megfelelnek az egész sornak. |
-y | A -i elavult szinonimája. |
-Z, –null | A fájlnevet általában követő karakter helyett egy nulla bájtot (az ASCII NULL karaktert) ad ki. Például a grep -lZ minden fájlnév után egy nulla bájtot ad ki a szokásos újsor helyett. Ez az opció egyértelművé teszi a kimenetet, még akkor is, ha a fájlnevek szokatlan karaktereket, például újsorokat tartalmaznak. Ez az opció olyan parancsokkal együtt használható, mint a find -print0, perl -0, sort -z és xargs -0, tetszőleges fájlnevek feldolgozására, még az újsor karaktereket tartalmazó fájlnevek feldolgozására is. |
Reguláris kifejezések
A reguláris kifejezés egy minta, amely karakterláncok egy halmazát írja le. A reguláris kifejezések az aritmetikai kifejezésekhez hasonlóan épülnek fel, különböző operátorokat használva kisebb kifejezések kombinálására.
A Grep a reguláris kifejezések szintaxisának két különböző változatát érti: Az “alap” és a “kiterjesztett” változatot. A GNU grep-ben nincs különbség az elérhető funkcionalitásban, ha bármelyik szintaxist használjuk. Más implementációkban az alap reguláris kifejezések kevésbé hatékonyak. A következő leírás az egrepben használt kiterjesztett reguláris kifejezésekre vonatkozik; az alapvető reguláris kifejezésekkel kapcsolatos különbségeket ezután foglaljuk össze.
Az alapvető építőelemek az egyetlen karakterre illeszkedő reguláris kifejezések. A legtöbb karakter, beleértve az összes betűt és számjegyet, olyan reguláris kifejezések, amelyek önmagukra illeszkednek. Bármely speciális jelentéssel rendelkező metakarakter idézhető, ha egy backslash előzi meg.
A zárójeles kifejezés a . A lista bármelyik karakterére illik; ha a lista első karaktere a ^ pont, akkor a listán kívüli bármelyik karakterre illik. Például a reguláris kifejezés minden egyes számjegyre illik.
A zárójeles kifejezésen belül a tartománykifejezés két, kötőjellel (“-“) elválasztott karakterből áll. Minden olyan karakterrel egyezik, amely a két karakter közé rendeződik, beleértve a helyi karakterkészletet is, a helyi karakterek összevetési sorrendjét és karakterkészletét használva. Például az alapértelmezett C nyelvterületen a . Sok helyi rendszer a karaktereket szótári sorrendbe rendezi, és ezekben a helyi rendszerekben gyakran nem egyenértékű a ; például lehet, hogy egyenértékű a , -val. A zárójeles kifejezések hagyományos értelmezésének eléréséhez használhatja a C nyelvterületet, ha az LC_ALL környezeti változót a C.
értékre állítja.
A zárójeles kifejezésekben a karakterek bizonyos megnevezett osztályai előre definiáltak, a következők szerint. Nevük magától értetődő, és ezek a következők: , , , , , , , , , , , , , , és . Például a ] azt jelenti , kivéve, hogy az utóbbi forma a C nyelvterület és az ASCII karakterkódolás függvénye, míg az előbbi független a nyelvterülettől és a karakterkészlettől. (Vegyük észre, hogy a zárójelek ezekben az osztálynevekben a szimbolikus nevek részét képezik, és a zárójeles listát határoló zárójelek mellett kell szerepeltetni őket). A legtöbb metakarakter elveszíti speciális jelentését a listákon belül. Egy szóvégi ] beillesztéséhez helyezze azt a lista elejére. Hasonlóképpen, ha egy ^ betűjelet akarunk felvenni, akkor bárhová tegyük, de ne az első helyre. Végül, ha egy szó szerinti – karaktert akarunk beilleszteni, akkor az utolsó helyre tegyük.
A pont . bármely egyetlen karakterrel megegyezik. A \w szimbólum a ] szinonimája, a \W pedig a ] szinonimája.
A ^ és a dollárjel (“$”) olyan metakarakterek, amelyek a sor elején és végén lévő üres karakterláncra illeszkednek. A \< és \> jelek a szó elején és végén lévő üres karakterláncot jelölik. Az \b szimbólum a szó szélén lévő üres karakterláncra illeszkedik, az \B pedig az üres karakterláncra, amennyiben az nem a szó szélén van.
A reguláris kifejezést számos ismétlési operátor egyike követheti:
? | Az előző elem opcionális és legfeljebb egyszer illeszkedik. |
* | Az előző elem nulla vagy többször illeszkedik. |
+ | Az előző elem egy vagy többször illeszkedik. |
{n} | Az előző elem pontosan n-szer illeszkedik. |
{n,} | Az előző elem n vagy többször illeszkedik. |
{n,m} | Az előző elem legalább n-szer, de legfeljebb m-szer illeszkedik. |
Két reguláris kifejezés összekapcsolható; az így kapott reguláris kifejezés illeszkedik bármely olyan karakterláncra, amely két olyan részlánc összekapcsolásával jön létre, amelyek megfelelnek az összekapcsolt részkifejezéseknek.
Két reguláris kifejezés összekapcsolható a | infix operátorral; az eredményül kapott reguláris kifejezés bármelyik alkifejezésnek megfelelő karakterláncra illeszkedik.
A többszörözés elsőbbséget élvez az összekapcsolással szemben, amely viszont elsőbbséget élvez a váltakozással szemben. Az egész részkifejezést zárójelbe lehet tenni, hogy felülbíráljuk ezeket az elsőbbségi szabályokat.
A visszahivatkozás \n, ahol n egy számjegy, a szabályos kifejezés n-edik zárójeles részkifejezése által előzőleg illesztett részláncra illik.
Az alapvető szabályos kifejezésekben a ?, +, {, |, (, és ) metakarakterek elveszítik speciális jelentésüket; ehelyett a zárójeles változatokat használjuk \\?, \+, \{, \|, \(, és \).
A hagyományos egrep nem támogatta a { metakaraktert, és néhány egrep implementáció támogatja helyette az \{-t, ezért a hordozható szkripteknek kerülniük kell az {-t az egrep mintákban, és a szó szerinti {-t kell használniuk.
A GNU egrep úgy próbálja támogatni a hagyományos használatot, hogy feltételezi, hogy az { nem különleges, ha egy érvénytelen intervallum specifikáció kezdete lenne. Például a shell egrep ‘{1’ parancsa a kétkarakteres {1 karakterláncot keresi ahelyett, hogy a reguláris kifejezés szintaktikai hibáját jelezné. A POSIX.2 ezt a viselkedést kiterjesztésként engedélyezi, de a hordozható szkripteknek kerülniük kell.
Környezeti változók
A grep viselkedését a következő környezeti változók befolyásolják:
A locale LC_foo meghatározása a három környezeti változó LC_ALL, LC_foo, LANG vizsgálatával történik, ebben a sorrendben. E változók közül az elsőként beállított változó határozza meg a nyelvjárást. Ha például az LC_ALL nincs beállítva, de az LC_MESSAGES pt_BR-re van állítva, akkor a brazil portugál lesz az LC_MESSAGES nyelvterület. A C nyelvterületet használja, ha egyik környezeti változó sincs beállítva, vagy ha a nyelvterület-katalógus nincs telepítve, vagy ha a grep nem nemzeti nyelvi támogatással (NLS) lett lefordítva.
GREP_OPTIONS
Ez a változó adja meg az alapértelmezett opciókat, amelyek az explicit opciók elé kerülnek. Ha például a GREP_OPTIONS értéke ‘–binary-files=without-match –directories=skip’, a grep úgy viselkedik, mintha a két opció –binary-files=without-match és –directories=skip minden explicit opció előtt lett volna megadva. Az opciókat szóköz választja el egymástól. A backslash elkerüli a következő karaktert, így használható szóközöket vagy backslash-t tartalmazó opció megadására.
GREP_COLOR
Meghatározza a kiemelés jelölését.
LC_ALL, LC_COLLATE, LANG
Ezek a változók adják meg az LC_COLLATE lokalitást, amely meghatározza a tartománykifejezések értelmezéséhez használt kollációs sorozatot, mint pl. .
LC_ALL, LC_CTYPE, LANG
Ezek a változók adják meg az LC_CTYPE lokalitást, amely meghatározza a karakterek típusát, pl., mely karakterek számítanak szóköznek.
LC_ALL, LC_MESSAGES, LANG
Ezek a változók határozzák meg az LC_MESSAGES nyelvi tartományt, amely meghatározza a grep által az üzenetekhez használt nyelvet. Az alapértelmezett C locale az amerikai angol nyelvű üzeneteket használja.
POSIXLY_CORRECT
Ha be van állítva, a grep a POSIX.2 előírásainak megfelelően viselkedik; ellenkező esetben a grep inkább más GNU programokhoz hasonlóan viselkedik. A POSIX.2 előírja, hogy a fájlneveket követő opciókat fájlnévként kell kezelni; alapértelmezés szerint az ilyen opciók az operanduslista elejére permutálódnak, és opcióként kezelendők. A POSIX.2 azt is megköveteli, hogy az el nem ismert opciókat “illegálisnak” diagnosztizálják, de mivel ezek nem igazán törvénysértőek, az alapértelmezés szerint “érvénytelennek” diagnosztizálják őket. A POSIXLY_CORRECT kikapcsolja az alább ismertetett _N_GNU_nonoption_argv_flags_-t is.
_N_GNU_nonoption_argv_flags_
(Itt N a grep numerikus folyamatazonosítója.) Ha e környezeti változó értékének i-edik karaktere 1, akkor a grep i-edik operandusát ne tekintsük opciónak, még ha annak is tűnik. A shell minden egyes futtatott parancshoz elhelyezheti ezt a változót a környezetében, megadva, hogy mely operandusok a fájlnév vadkártyás kiterjesztésének eredményei, és ezért nem kezelhetők opcióként. Ez a viselkedés csak a GNU C könyvtárral érhető el, és csak akkor, ha a POSIXLY_CORRECT nincs beállítva.
Példák
egrep "support|help|windows" myfile.txt
Támogató segítség és ablakok mintáinak keresése a myfile.txt fájlban.
egrep '^+$' myfile.txt
A myfile.txt fájl minden olyan sorának keresése, amely olyan betűszóval kezdődik, amely egyben a sor vége is.
egrep -c '^begin|end$' myfile.txt
Megszámolja a myfile.txt állományban azon sorok számát, amelyek a ‘begin’ szóval kezdődnek vagy a ‘end’ szóval végződnek.
fgrep – Olyan szöveg szűrése, amely megfelel egy rögzített karakterláncnak.
grep – Olyan szöveg szűrése, amely megfelel egy reguláris kifejezésnek.
sed – Szöveg szűrésére és átalakítására szolgáló segédprogram.
sh – A Bourne shell parancsértelmező.