Az egrep parancs a grep parancs családjába tartozik, amelyet Linuxban mintakeresésre használnak. Ha már használtad a grep parancsot, az egrep ugyanúgy működik, mint a grep -E (grep Extended regex’). Az eggrep egy adott fájlt sorról sorra átvizsgál, és kiírja azokat a sorokat, amelyek tartalmazzák a keresési karakterláncot/szabályos kifejezést. Ebben a cikkben az egrep parancsok 15 hasznos példáját ismertetjük, amelyek segítenek a kezdőknek és még a szakértőknek is értelmes kereséseket végezni LinuxbanEzeket a példákat egy Debian 10 Buster rendszeren hajtottuk végre, de a legtöbb Linux disztribúción könnyen megismételhetők.
- 1. példa: Egy adott karakterlánc keresése egy fájlban
- 2. példa: Egy adott karakterlánc keresése több fájlban
- 3. példa: A karakterlánc rekurzív keresése a teljes könyvtárban
- 4. példa: Nagy- és kisbetű-független keresés végrehajtása
- 5. példa: Egy karakterlánc keresése teljes szóként és nem részszóként
- 6. példa: Csak a karakterláncot tartalmazó fájlnevek kiírása
- 7. példa: Csak a keresett karakterlánc nyomtatása egy fájlból
- 8. példa: A keresett karakterlánc előtti, utáni vagy körüli n számú sorok megjelenítése
- 9. példa: Szabályos kifejezések illesztése fájlokban
- 10. példa: A keresési karakterlánc kiemelése
- 11. példa: Invert keresés végrehajtása egy fájlban
- 12. példa: Invertált keresés végrehajtása több kritérium/keresési minta alapján
- 13. példa: A keresett karakterláncnak megfelelő sorok számának kiírása
- 14. példa: A sorszám megjelenítése, ahol a karakterláncot találta
- Példa 15: A keresett karakterlánc találati helyének megjelenítése a fájlban
1. példa: Egy adott karakterlánc keresése egy fájlban
Ez az egrep parancs leggyakoribb felhasználása. Azt csinálod, hogy megadsz egy karakterláncot, amit keresni akarsz, és a fájl nevét, amiben ezt a karakterláncot meg akarod keresni. Az eredmény ezután megjeleníti a keresett karakterláncot tartalmazó teljes sort.
Szintaktika:
Példa:
A példában a “debian” szót kerestem a megadott szöveges fájlban. Láthatjuk, hogy az eredmény a “debian” szót tartalmazó teljes sort megjeleníti:
2. példa: Egy adott karakterlánc keresése több fájlban
Az egrep paranccsal egy karakterláncot kereshetünk több, ugyanabban a könyvtárban található fájl között. Csak egy kicsit pontosabban kell megadnia a keresett fájlok “mintáját”. Ez a most bemutatásra kerülő példán keresztül még világosabbá válik.
Szintaktika:
Példa:
Itt a “debian” szót fogjuk keresni az összes .txt fájlokat a fájlnévminta megadásával a következőképpen:
A parancs kiírta az összes sort, valamint a “debian” szót tartalmazó fájlneveket az aktuális könyvtár összes .txt fájljából.
3. példa: A karakterlánc rekurzív keresése a teljes könyvtárban
Ha egy könyvtár és alkönyvtárainak összes fájljában keresni akarunk egy karakterláncot, akkor ezt az egrep parancs -r jelzőjének használatával érhetjük el.
Szintaktika:
Példa:
A példában a “sample” szót keresem a teljes current(Downloads) könyvtár fájljaiban.
A találat tartalmazza az összes olyan sort, a fájlnevekkel együtt, amely tartalmazza a “minta” szót a Letöltések könyvtár összes fájljából és annak alkönyvtáraiból.
4. példa: Nagy- és kisbetű-független keresés végrehajtása
A -i jelzővel az egrep parancs segítségével kiírhatja az eredményeket egy keresési karakterlánc alapján anélkül, hogy törődnie kellene a nagy- és kisbetűvel.
Szintaktika:
Példa:
Itt a “debian” szót keresem, és azt akarom, hogy az eredmények a “debian” vagy “Debian” szót tartalmazó fájl összes sorát megjelenítse, függetlenül annak nagy- és kisbetűjétől.
Láthatjuk, hogy a -i flag segített nekem abban, hogy a keresési karakterláncot tartalmazó összes sort lekérjem a “case insensitive” kereséssel.
5. példa: Egy karakterlánc keresése teljes szóként és nem részszóként
Amikor általában egrep segítségével keresünk egy karakterláncot, az összes olyan szót kiírja, amely a karakterláncot részszóként tartalmazza. Például a “on” karakterlánc keresése az összes olyan szót kiírja, amely tartalmazza a “on” karakterláncot, például ” on”, “only”, “monitor”, “clone” stb. Ha azt szeretné, hogy az eredmények csak az “on” szót jelenítsék meg teljes szóként, ne pedig részláncokként, akkor használhatja a -w jelzőt az egrep segítségével.
Szintaktika:
Példa:
Itt a “on” sztringet keresem egy mintafájlban:
A fenti kimeneten látható, hogy a “csak” szót is tartalmazza. Én azonban nem ezt szeretném, mivel kizárólag az “on” szót keresem. Ezért helyette ezt a parancsot fogom használni:
Most a keresési eredményeim csak azokat a sorokat tartalmazzák, amelyek az “on” szót egész szóval tartalmazzák.
6. példa: Csak a karakterláncot tartalmazó fájlnevek kiírása
Néha csak azokat a fájlneveket akarjuk lekérni, amelyek tartalmaznak egy adott karakterláncot, és nem az azt tartalmazó sorokat akarjuk kiírni. Ezt az egrep parancs -l (kis L) jelzőjével érhetjük el.
Szintaktika:
Példa:
Itt az aktuális könyvtárban lévő összes .txt fájlban a “sample” karakterláncot keresem:
A keresés eredménye csak a megadott karakterláncot tartalmazó fájlok nevét írja ki.
7. példa: Csak a keresett karakterlánc nyomtatása egy fájlból
A keresett karakterláncot tartalmazó teljes sor nyomtatása helyett az egrep paranccsal magát a karakterláncot is kiírhatjuk. A karakterlánc annyiszor kerül kiírásra, ahányszor a megadott fájlban szerepel.
Szintaktika:
Példa:
Ebben a példában a “This” szót keresem a fájlban.
Megjegyzés: A parancsnak ez a használata akkor jön jól, ha egy karakterláncot keresünk egy reguláris kifejezés mintája alapján. A reguláris kifejezéseket a következő példák egyikében részletesen kifejtjük.
8. példa: A keresett karakterlánc előtti, utáni vagy körüli n számú sorok megjelenítése
Néha nagyon fontos tudni, hogy egy fájlban milyen kontextusban szerepel egy adott karakterlánc. Az egrep abban az értelemben jön jól, hogy segítségével megjeleníthető a keresett karakterláncot tartalmazó sor, valamint az azt megelőző, követő és körülvevő meghatározott számú sor.
Ez a szöveges mintafájl, amelyet a következő példák magyarázatához használok:
N számú sor a keresési karakterlánc után:
Az A jelzőt a következő módon használva megjeleníti a keresési karakterláncot tartalmazó sort és az azt követő N számú sort:
Példa:
N számú sor a keresési karakterlánc előtt:
A B jelzőt a következő módon használva megjeleníti a keresési karakterláncot tartalmazó sort és az azt megelőző N számú sort:
Példa:
N számú sor a keresési karakterlánc előtt:
A C jelzőt a következő módon használva megjeleníti a keresési karakterláncot tartalmazó sort, valamint az azt megelőző és követő N számú sort:
Példa:
9. példa: Szabályos kifejezések illesztése fájlokban
Az egrep parancs egyre erőteljesebbé válik, ha egy fájlban szilárd keresőszövegek helyett szabályos kifejezésekre keresünk.
Szintaktika:
Magyarázzuk el, hogyan használhatjuk a reguláris kifejezéseket az egrep keresésben:
Megismétlési operátor | Használjuk |
? | Az előző elem előtt ? opcionális, és legfeljebb egyszer illeszkedik |
* | A * előtti elemet nulla vagy több alkalommal illeszti |
+ | A + előtti elemet egy vagy több alkalommal illesztjük |
{n} | Az előző elemet pontosan n-szer illesztjük. |
{n,} | Az előző elem legalább n-szer illeszkedik |
{,m} | Az előző elem legfeljebb m-szer illeszkedik |
{n,m} | Az előző elem legalább n-szer, de legfeljebb m-szer illeszkedik |
Példa:
A következő példában a következő kifejezést tartalmazó sorok illeszkednek:
“Gnome” kezdetű és ” programok”
10. példa: A keresési karakterlánc kiemelése
Ha a GREP_OPTIONS környezeti változót az alábbiak szerint állítja be, akkor a kimenetét a keresési karakterlánc/mintázat kiemelésével kapja az eredményekben:
Ezután bármilyen módon kereshet a karakterláncra, amit a cikk példáiban leírtunk.
11. példa: Invert keresés végrehajtása egy fájlban
Az invert keresés alatt azt értjük, hogy az egrep parancs mindent kiír a fájlból, kivéve a keresett karakterláncot tartalmazó sorokat. A következő mintafájlt fogjuk használni az egrep segítségével történő invert keresés magyarázatához. A fájl tartalmát a cat parancs segítségével nyomtattuk ki:
Szintaktika:
Példa:
Az említett mintafájlból szeretnénk kihagyni a kimenetből a “kettő” szót tartalmazó sort, ezért a következő parancsot használjuk:
Láthatjuk, hogy a kimenet mindent tartalmaz a mintafájlból, kivéve a második sort, amely a “kettő” keresőszót tartalmazta.
12. példa: Invertált keresés végrehajtása több kritérium/keresési minta alapján
A -v jelzővel az egrep parancsot arra is rávehetjük, hogy egynél több keresőszál/mintázat alapján végezzen invertált keresést.
A forgatókönyv ismertetéséhez ugyanazt a mintafájlt fogjuk használni, amelyet a 11. példában említettünk.
Szintaktika:
…. filename
Példa:
Az említett mintafájlból az “egy” és “kettő” szavakat tartalmazó sor(ok)at szeretnénk kihagyni a kimenetből, ezért a következő parancsot fogjuk használni:
A -e jelzővel két szót adtunk meg kihagyásra, ezért a kimenet a következőképpen fog kinézni:
13. példa: A keresett karakterláncnak megfelelő sorok számának kiírása
Ahelyett, hogy a keresett karakterláncot vagy az azt tartalmazó sorokat kiírnánk a fájlból, az egrep parancs segítségével megszámolhatjuk és kiírhatjuk a karakterláncnak megfelelő sorok számát. Ez a számolás az egrep parancs -c jelzőjével kérhető ki.
Szintaktika:
Példa:
Ebben a példában a -c flag segítségével megszámoljuk a “This” szót tartalmazó sorok számát a mintafájlunkban:
Az inverz keresés funkciót is használhatja itt, hogy megszámolja és kiírja azon sorok számát, amelyek nem tartalmazzák a keresett karakterláncot:
14. példa: A sorszám megjelenítése, ahol a karakterláncot találta
A -n jelzővel elérheti, hogy az egrep parancs a keresett karakterláncot tartalmazó sorszámmal együtt kiírja a talált sort.
Szintaktika:
Példa:
Láthatja, hogy a keresési eredményekkel szemben a sorszámok is megjelennek.
Példa 15: A keresett karakterlánc találati helyének megjelenítése a fájlban
Ha tudni szeretné, hogy a keresett karakterlánc milyen helyen van a fájlban, akkor az egrep parancshoz használhatja a -b jelzőt.
Példa:
A keresési eredmény kiírja a fájl bájteltávolságát, ahol a keresőszó létezik.Ez volt az egrep parancs részletes használata. A cikkben ismertetett zászlók kombinációjának használatával értelmesebb és összetettebb kereséseket végezhet a fájljain.