A grep parancs használata Linux alatt

A Linux grep
parancs egy karakterlánc és mintaillesztési segédprogram, amely több fájl egyező sorait jeleníti meg. Más parancsok csövezett kimenetével is működik. Megmutatjuk, hogyan.
A történet mögött grep
A grep
parancs három okból híres Linux és Unix körökben. Először is, rendkívül hasznos. Másodszor, a lehetőségek sokasága elsöprő lehet. Harmadszor, egyik napról a másikra írták, hogy kielégítsenek egy adott igényt. Az első kettő dörömböl; a harmadik kissé kikapcsol.
Ken Thompson kivonta a ed
szerkesztőből a reguláris kifejezés keresési képességeit (ejtsd: ee-dee), és létrehozott egy kis programot - saját használatra - a szöveges fájlok közötti keresésre. A Bell Labs osztályvezetője, Doug Mcilroy megkereste Thompsont, és leírta a problémát, amellyel kollégái, Lee McMahon szembesültek.
McMahon szövegelemzéssel próbálta azonosítani a föderalista írások szerzőit. Szüksége volt egy eszközre, amely képes kifejezéseket és karakterláncokat keresni a szöveges fájlokban. Thompson azon az estén körülbelül egy órát töltött azzal, hogy eszközét általános hasznossá tette, amelyet mások is használhattak, és átnevezték grep
. A nevet a ed
parancssorból vette át g/re/p
, amely „globális reguláris kifejezés keresésként” jelent.
Megnézheti, ahogy Thompson Brian Kernighannal beszélget a születéséről grep
.
Egyszerű keresések a grep segítségével
Ha egy fájlban szeretne karakterláncot keresni, adja meg a keresési kifejezést és a fájl nevét a parancssorban:
Megjelennek az egyező vonalak. Ebben az esetben egyetlen vonalról van szó. Az egyező szöveg ki van emelve. Ez azért van, mert a legtöbb disztribúcióban grep
álneve:
alias grep = "grep --colour = auto"
Nézzük meg azokat az eredményeket, ahol több sor is egyezik. Megkeressük az „Átlag” szót egy alkalmazás naplófájljában. Mivel nem tudjuk felidézni, hogy a naplófájlban kis szó van-e, a (kisbetű -i
figyelmen kívül hagyása) opciót fogjuk használni :
grep -i Átlagos geek-1.log
Minden egyező sor megjelenik, mindegyikben kiemelve az egyező szöveget.
A nem egyező vonalakat megjeleníthetjük a -v (invert match) opcióval.
grep -v Mem geek-1.log
Nincs kiemelés, mert ezek a nem egyező vonalak.
Mi okozhatja grep
, hogy teljesen csendes. Az eredmény a héjhoz kerül, mint visszatérési érték innen grep
:. Az eredmény nulla eszköz a húr volt találtak, és eredményeként az egyik eszköze, hogy nem talált. A visszatérési kódot a $?
speciális paraméterek segítségével ellenőrizhetjük :
grep -q átlagos geek-1.log
visszhang $?
grep -q howtogeek geek-1.log
visszhang $?
Rekurzív keresések a grep segítségével
Beágyazott könyvtárakban és alkönyvtárakban történő kereséshez használja a -r (rekurzív) beállítást. Ne feledje, hogy nem ad meg fájlnevet a parancssorban, meg kell adnia egy elérési utat. Itt keresünk az aktuális könyvtárban. és bármely alkönyvtár:
grep -r -i memfree.
A kimenet tartalmazza az illeszkedõ sorok könyvtárát és fájlnevét.
A (rekurzív dereference) opció grep
segítségével követhetünk szimbolikus linkeket -R
. Van egy szimbolikus linkünk ebben a könyvtárban, az úgynevezett logs-folder
. Rámutat /home/dave/logs
.
ls -l naplók-mappa
Ismételjük meg az utolsó keresést a -R
(rekurzív dereference) opcióval:
grep -R -i memfree.
A szimbolikus linket követi, és a könyvtár, amelyre mutat, szintén megkeresi grep
.
Egész szavak keresése
Alapértelmezés szerint grep
egyezik egy sorral, ha a keresési cél bárhol megjelenik a sorban, beleértve egy másik karakterláncot is. Nézd meg ezt a példát. Megkeressük a „szabad” szót.
grep -i ingyenes geek-1.log
Az eredmények olyan sorok, amelyekben a „free” karakterlánc szerepel, de ezek nem külön szavak. A MemFree karakterlánc részét képezik.
Kényszeríteni, grep
hogy csak külön „szavaknak” feleljen meg, használja a -w
(regexp szó) beállítást.
grep -w -i ingyenes geek-1.log
visszhang $?
Ezúttal nincsenek találatok, mert a „free” keresési kifejezés nem külön fájlként jelenik meg a fájlban.
Több keresési kifejezés használata
A -E
(kiterjesztett regexp) opció lehetővé teszi több szó keresését. (Az -E
opció helyettesíti a .x elavult egrep
verzióját grep
.)
Ez a parancs két keresési kifejezést keres: „átlagos” és „memfree”.
grep -E -w -i "átlagos | memfree" geek-1.log
Az összes megfelelő sor megjelenik az egyes keresési kifejezéseknél.
Több olyan kifejezésre is kereshet, amelyek nem feltétlenül egész szavak, de lehetnek egész szavak is.
A -e
(minták) opció lehetővé teszi több keresési kifejezés használatát a parancssorban. A rendszeres kifejezés zárójel funkcióját használjuk a keresési minta létrehozásához. Azt mondja, grep
hogy illeszkedjen a „[]” zárójelben szereplő karakterek bármelyikéhez. Ez azt jelenti grep
, hogy a keresés során a „kB” vagy a „KB” megegyezik.
Mindkét húr illeszkedik, sőt, egyes sorok mindkét húrot tartalmazzák.
Pontok egyezése
A -x
(line regexp) csak azoknak a soroknak felel meg, amelyekben a teljes sor megegyezik a keresési kifejezéssel. Keressünk egy dátum- és időbélyegzőt, amelyről tudjuk, hogy csak egyszer jelenik meg a naplófájlban:
grep -x "Jan-20 - 06 15:24:35" geek-1.log
Megtalálja és megjeleníti az egyetlen sort, amely megfelel.
Ennek az ellenkezője csak a nem egyező vonalakat mutatja . Ez hasznos lehet, ha konfigurációs fájlokat néz. A megjegyzések nagyszerűek, de néha nehéz észrevenni a tényleges beállításokat mind között. Itt van a /etc/sudoers
fájl:
Hatékonyan kiszűrhetjük az ilyen megjegyzéssorokat:
sudo grep -v "#" / etc / sudoers
Ezt sokkal könnyebb elemezni.
Csak egyező szöveget jelenít meg
Előfordulhat olyan eset, amikor nem a teljes egyező sort akarja látni, csak az egyező szöveget. A -o
(csak egyező) opció éppen ezt teszi.
grep -o MemFree geek-1.log
A kijelző csak a keresési kifejezésnek megfelelő szöveget jeleníti meg a teljes egyező sor helyett.
Számolás grep-el
grep
nem csak a szövegről szól, hanem számszerű információkat is szolgáltathat. Tudjuk, hogy grep
gróf nekünk különböző módon. Ha tudni akarjuk, hogy egy keresési kifejezés hányszor jelenik meg egy fájlban, használhatjuk a -c
(számlálás) opciót.
grep -c átlagos geek-1.log
grep
jelentése szerint a keresési kifejezés 240-szer jelenik meg ebben a fájlban.
A (sorszám) opcióval grep
megjelenítheti az egyes illeszkedő -n
sorok sorszámát.
grep -n Jan geek-1.log
Az egyes egyező sorok sorszáma a sor elején jelenik meg.
A megjelenített eredmények számának csökkentéséhez használja a -m
(max. Szám ) opciót. A kimenetet öt egyező sorra fogjuk korlátozni:
grep -m5 -n Jan geek-1.log
Környezet hozzáadása
Gyakran hasznos, ha az egyes illeszkedő sorokhoz láthat néhány további sort - esetleg nem egyező sorokat. segíthet megkülönböztetni, hogy az illesztett vonalak közül melyek érdeklik.
Néhány vonal megjelenítéséhez az egyező sor után használja az -A (kontextus után) opciót. Három sort kérünk ebben a példában:
grep -A 3 -x "január-20-án 15:24:35" geek-1.log
Az egyező sor előtti sorok megtekintéséhez használja a -B
(context előtt) opciót.
grep -B 3 -x "20. jan-20 15:24:35" geek-1.log
Az illesztési sor előtti és utáni sorok felvételéhez használja a -C
(kontextus) opciót.
grep -C 3 -x "január-20-án 15:24:35" geek-1.log
Megfelelő fájlok megjelenítése
A keresési kifejezést tartalmazó fájlok nevének megtekintéséhez használja a -l
(fájlok egyezéssel) beállítást. A következő sl.h
paranccsal megtudhatja, hogy mely C forráskódfájlok tartalmaznak hivatkozásokat a fejlécfájlra:
grep -l "sl.h" * .c
A fájlnevek vannak felsorolva, nem az egyező sorok.
És természetesen kereshetünk olyan fájlokat is, amelyek nem tartalmazzák a keresési kifejezést. A -L
(fájlok egyezés nélkül) opció éppen ezt teszi.
grep -L "sl.h" * .c
Vonalak kezdete és vége
Kényszeríthetjük, grep
hogy csak azokat a mérkőzéseket jelenítsük meg, amelyek vagy a sor elején vagy végén vannak. A „^” reguláris kifejezés operátor egyezik a sor elejével. A naplófájl gyakorlatilag az összes sorában szóközök lesznek, de olyan sorokat fogunk keresni, amelyek első karaktere szóköz:
grep "^" geek-1.log
Megjelennek azok a vonalak, amelyeknek első karakterként szóköz van - a sor elején.
A sor végének egyezéséhez használja a „$” reguláris kifejezés operátort. Olyan vonalakat fogunk keresni, amelyek vége „00”.
grep "00 $" geek-1.log
A kijelzőn azok a sorok láthatók, amelyek utolsó karaktere „00”.
Pipes használata grep-el
Természetesen be lehet vezetni grep
a bemenetet , a kimenetet grep
egy másik programba, és grep
a csővezeték láncának közepén lehet.
Tegyük fel, hogy az „ExtractParameters” karakterlánc összes előfordulását meg akarjuk tekinteni a C forráskód fájljainkban. Tudjuk, hogy elég sok lesz, ezért a kimenetet a következőkbe csövezzük less
:
grep "ExtractParameters" * .c | Kevésbé
A kimenetet a less
.
Ez lehetővé teszi a fájlok felsorolását és a less's
keresési lehetőség használatát .
Ha a kimenetet innen csövezzük grep
, wc
és a -l
(vonalak) opciót használjuk, megszámolhatjuk a forráskód fájlokban az „ExtractParameters” -t tartalmazó sorok számát. (Ezt elérhetnénk a grep
-c
(számlálás) opcióval, de ez egy jó módszer a csővezeték kiépítésének bemutatására grep
.)
grep "ExtractParameters" * .c | wc -l
A következő parancs, mi irányítsuk kimenetét származó ls
be grep
és csővezeték a kimenet grep
be sort
. Felsoroljuk a fájlokat az aktuális könyvtárban, kiválasztjuk azokat, amelyekben szerepel az „Aug” karakterlánc, és fájlméret szerint rendezzük őket:
ls -l | grep "Aug" | rendezés + 4n
Bontjuk le ezt:
- ls -l : Végezze el a fájlok hosszú formátumú felsorolását a gombbal
ls
. - grep „Aug” : Válassza ki a
ls
listából azokat a sorokat , amelyekben „Aug” szerepel. Ne feledje, hogy ez olyan fájlokat is talál, amelyek nevében „Aug” szerepel. - sort + 4n : A kimenet rendezése a negyedik oszlop grep-jéből (fájlméret).
Rendezzük az összes augusztusban módosított fájlt (évtől függetlenül), a fájlméret növekvő sorrendjében.
KAPCSOLÓDÓ: A csövek használata Linux rendszeren
grep: Kevesebb parancs, inkább szövetséges
grep
egy fantasztikus eszköz, amely rendelkezésére áll. 1974-ből származik, és még mindig erős, mert szükségünk van arra, amit csinál, és semmi sem teszi jobban.
grep
Néhány reguláris kifejezéssel összekapcsolva a fu valóban a következő szintre emeli.
KAPCSOLÓDÓ: Hogyan lehet az alapszintű reguláris kifejezéseket használni a jobb kereséshez és az időmegtakarításhoz?