A grep parancs használata Linuxon

A Linux grep parancs egy karakterlánc- és mintaegyeztető segédprogram, amely több fájl egyező sorait jeleníti meg. Más parancsok vezetékes kimenetével is működik. Megmutatjuk, hogyan.

The Story Behind grep

A grep parancs híres Linux és Unix körökben három okból. Először is, rendkívül hasznos. Másodszor, a a lehetőségek tárháza elsöprő lehet. Harmadszor, egyik napról a másikra íródott, hogy egy adott igényt kielégítsen. Az első kettő bumm; a harmadik kissé ki van kapcsolva.

Ken Thompson kibontotta a reguláris kifejezés keresési lehetőségeit az ed szerkesztőből (kiejtve ee-dee), és készített egy kis programot – saját használatra –, amellyel szöveges fájlok között kereshet. Osztályvezetője a Bell Labs, Doug Mciroy, felkereste Thompsont, és egyik kollégája leírta a problémát, Lee McMahon, volt szemben.

McMahon megpróbálta azonosítani a szerzőket Federalista lapok szövegelemzés révén. Olyan eszközre volt szüksége, amely képes kifejezéseket és karakterláncokat keresni a szöveges fájlokban. Thompson körülbelül egy órát töltött azon az estén, hogy általános segédprogramot készítsen eszközéből, amelyet mások is használhatnak, és átnevezte grep-re. A nevet a g/re/p ed parancskarakterláncból vette, ami „globális reguláris kifejezés-keresés”-nek felel meg.

Nézheted, ahogy Thompson beszél nak nek Brian Kernighan grep születéséről.

Egyszerű keresések grep segítségével

Ha egy karakterláncot szeretne keresni egy fájlban, adja meg a keresett kifejezést és a fájl nevét a parancssorban:

Megjelennek a megfelelő sorok. Ebben az esetben egyetlen sorról van szó. A megfelelő szöveg kiemelve. Ennek az az oka, hogy a legtöbb disztribúcióban a grep álneve:

alias grep='grep --colour=auto'

Nézzük azokat az eredményeket, ahol több sor is egyezik. Megkeressük az „Átlagos” szót az alkalmazásnaplófájlban. Mivel nem tudjuk felidézni, ha a szó kisbetűvel szerepel a naplófájlban, a -i (kis- és nagybetűk figyelmen kívül hagyása) kapcsolót használjuk:

grep -i Average geek-1.log

Minden egyező sor megjelenik, mindegyikben kiemelve a megfelelő szöveget.

A nem egyező sorokat a -v (invert match) kapcsolóval tudjuk megjeleníteni.

grep -v Mem geek-1.log

Nincs kiemelés, mert ezek a nem egyező sorok.

  Alkalmazások és játékok telepítése a Google TV-n

A grep teljesen elnémulhat. Az eredmény a grep visszatérési értékeként kerül átadásra a shell-nek. A nulla eredmény azt jelenti, hogy a karakterlánc megtalálható, az egy pedig azt, hogy nem található. A visszaküldési kódot a $? speciális paraméterek:

grep -q average geek-1.log
echo $?
grep -q wdzwdz geek-1.log
echo $?

Rekurzív keresések grep segítségével

A beágyazott könyvtárak és alkönyvtárak közötti kereséshez használja a -r (rekurzív) kapcsolót. Vegye figyelembe, hogy nem ad meg fájlnevet a parancssorban, hanem elérési utat kell megadnia. Itt az aktuális „.” könyvtárban keresünk. és az esetleges alkönyvtárak:

grep -r -i memfree .

A kimenet tartalmazza az egyes egyező sorok könyvtárát és fájlnevét.

A grep szimbolikus hivatkozásokat követhet a -R (rekurzív dereferencia) opció használatával. Ebben a könyvtárban van egy szimbolikus hivatkozásunk, az úgynevezett logs-folder. A /home/dave/logs könyvtárra mutat.

ls -l logs-folder

Ismételjük meg a legutóbbi keresésünket a -R (rekurzív dereferencia) opcióval:

grep -R -i memfree .

A szimbolikus hivatkozást követi, és azt a könyvtárat, amelyre mutat, a grep is megkeresi.

Egész szavak keresése

Alapértelmezés szerint a grep megfelel egy sornak, 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. Az „ingyenes” szóra fogunk keresni.

grep -i free geek-1.log

Az eredmények olyan sorok, amelyekben a „szabad” karakterlánc szerepel, de ezek nem külön szavak. A „MemFree” karakterlánc részei.

Ha arra szeretné kényszeríteni a grep-et, hogy csak különálló „szavak” feleljen meg, használja a -w (word regexp) opciót.

grep -w -i free geek-1.log
echo $?

Ezúttal nincs találat, mert az „ingyenes” keresőkifejezés nem külön szóként jelenik meg a fájlban.

Több keresési kifejezés használata

Az -E (kiterjesztett reguláris kifejezés) opció lehetővé teszi több szó keresését. (A -E opció helyettesíti az elavult a grep egrep verziója.)

Ez a parancs két keresési kifejezést keres: „átlagos” és „memfree”.

grep -E -w -i "average|memfree" geek-1.log

grep -E -w -i

Minden keresési kifejezéshez az összes egyező sor megjelenik.

A grep -E -w -i kimenete

Több olyan kifejezésre is kereshet, amelyek nem feltétlenül teljes szavak, de lehetnek egész szavak is.

A -e (patterns) opció lehetővé teszi több keresési kifejezés használatát a parancssorban. A reguláris kifejezés zárójel funkcióját használjuk keresési minta létrehozásához. Megmondja, hogy a grep megfeleljen a zárójelben lévő karakterek bármelyikének.[].” Ez azt jelenti, hogy a grep keresés közben a „kB” vagy a „KB” kifejezéssel fog egyezni.

  Tároljon cikkeket, képeket és PDF-eket a Dropboxban vagy a Google Drive-ban [Chrome]

Mindkét karakterlánc illeszkedik, sőt, egyes sorok mindkét karakterláncot tartalmazzák.

Pontosan illeszkedő vonalak

Az -x (soros reguláris kifejezés) csak azokat a sorokat fogja egyezni, ahol a teljes sor megegyezik a keresett kifejezéssel. Keressünk olyan dátum- és időbélyeget, amelyről tudjuk, hogy csak egyszer jelenik meg a naplófájlban:

grep -x "20-Jan--06 15:24:35" geek-1.log

grep -x

Megkeresi és megjeleníti az egyező sort.

Ennek az ellenkezője, hogy csak azokat a vonalakat jeleníti meg, amelyek nem egyeznek. Ez akkor lehet hasznos, 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 az összes között. Itt van az /etc/sudoers fájl:

Hatékonyan kiszűrhetjük a megjegyzéssorokat így:

sudo grep -v "https://www.wdzwdz.com/496056/how-to-use-the-grep-command-on-linux/#" /etc/sudoers

sudo grep -v

Így sokkal könnyebb elemezni.

Csak egyező szöveg megjelenítése

Előfordulhat, hogy nem szeretné látni a teljes egyező sort, csak a megfelelő szöveget. Az -o (csak megfelelő) opció éppen ezt teszi.

grep -o MemFree geek-1.log

A kijelzőn a teljes egyező sor helyett csak a keresett kifejezésnek megfelelő szöveg jelenik meg.

Számlálás grep segítségével

A grep nem csak szövegről szól, hanem számszerű információkat is szolgáltathat. A grep-et többféleképpen is beszámíthatjuk. Ha tudni akarjuk, hogy egy keresett kifejezés hányszor jelenik meg egy fájlban, használhatjuk a -c (count) kapcsolót.

grep -c average geek-1.log

grep jelentése szerint a keresett kifejezés 240-szer szerepel ebben a fájlban.

Beállíthatja, hogy a grep megjelenítse az egyes egyező sorok sorszámát az -n (sorszám) kapcsolóval.

grep -n Jan geek-1.log

Minden egyező sor sorszáma megjelenik a sor elején.

A megjelenített eredmények számának csökkentéséhez használja a -m (maximális szám) kapcsolót. A kimenetet öt egyező sorra korlátozzuk:

grep -m5 -n Jan geek-1.log

Kontextus hozzáadása

Gyakran hasznos, ha az egyes egyező sorokhoz további sorokat – esetleg nem egyező sorokat – láthatunk. segíthet megkülönböztetni, hogy az egyező sorok közül melyik érdekli Önt.

Ha a megfelelő sor után néhány sort szeretne megjeleníteni, használja az -A (kontextus után) opciót. Ebben a példában három sort kérünk:

grep -A 3 -x "20-Jan-06 15:24:35" geek-1.log

grep -A 3 -x

Ha az egyező sor előtti sorokat szeretné látni, használja a -B (kontextus előtt) opciót.

grep -B 3 -x "20-Jan-06 15:24:35" geek-1.log

grep -B 3 -x

A megfelelő sor előtti és utáni sorok beillesztéséhez használja a -C (kontextus) opciót.

grep -C 3 -x "20-Jan-06 15:24:35" geek-1.log

grep -C 3 -x

Megfelelő fájlok megjelenítése

A keresett kifejezést tartalmazó fájlok nevének megtekintéséhez használja a -l (egyezéssel rendelkező fájlok) kapcsolót. Ha meg szeretné tudni, hogy mely C forráskód fájlok tartalmaznak hivatkozásokat az sl.h fejlécfájlra, használja ezt a parancsot:

grep -l "sl.h" *.c

grep -l

A fájlnevek vannak felsorolva, nem a megfelelő sorok.

  Hogyan kaphat értesítést a terminálparancsokról Linuxon

A grep -l kimenete

És természetesen kereshetünk olyan fájlokat is, amelyek nem tartalmazzák a keresett kifejezést. Az -L (egyezés nélküli fájlok) opció pontosan ezt teszi.

grep -L "sl.h" *.c

grep -L

Sorok eleje és vége

Kényszeríthetjük a grep-et, hogy csak azokat a találatokat jelenítse meg, amelyek egy sor elején vagy végén vannak. A „^” reguláris kifejezés operátora megegyezik a sor elejével. A naplófájlban gyakorlatilag minden sor szóközt tartalmaz, de olyan sorokat fogunk keresni, amelyeknek első karaktere szóköz:

grep "^ " geek-1.log

grep

Megjelennek azok a sorok, amelyeknek első karaktere szóköz – a sor elején.

Kimenet grep

A sor végének megfeleltetéséhez használja a „$” reguláris kifejezés operátorát. Olyan sorokat fogunk keresni, amelyek „00”-ra végződnek.

grep "00$" geek-1.log

grep

A kijelzőn megjelennek azok a sorok, amelyek utolsó karaktere „00”.

grep kimenete

Pipes használata grep-pel

Természetesen a bemenetet a grepbe, a grep kimenetét egy másik programba továbbíthatja, és a grep egy csőlánc közepén fészkelődik.

Tegyük fel, hogy látni szeretnénk az „ExtractParameters” karakterlánc összes előfordulását a C forráskód fájljainkban. Tudjuk, hogy elég sok lesz, ezért a kimenetet kevesebbre tesszük:

grep "ExtractParameters" *.c | less

grep

A kimenet kevesebbben jelenik meg.

Kimenet a grepből

Ezzel lapozhat a fájllistában, és használhatja a less keresési funkcióját.

Ha a grep kimenetét a wc-be vezetjük, és a -l (vonalak) opciót használjuk, akkor mi meg tudja számolni a sorok számát az „ExtractParameters”-t tartalmazó forráskódfájlokban. (Ezt a grep -c (count) kapcsolóval is elérhetjük, de ez egy ügyes módja annak, hogy demonstráljuk a grepből való kivezetést.)

grep "ExtractParameters" *.c | wc -l

grep

A következő paranccsal az ls kimenetét a grep-be, a grep kimenetét pedig a sort-ba csövekbe helyezzük. Felsoroljuk a fájlokat az aktuális könyvtárban, kiválasztva azokat, amelyekben az „Aug” karakterlánc található, és fájlméret szerint rendezi őket:

ls -l | grep "Aug" | sort +4n

ls -l |  grep

Bontsuk szét:

ls -l: Végezze el a fájlok hosszú formátumú listáját az ls használatával.
grep „Aug”: Válassza ki azokat a sorokat az ls listából, amelyekben az „Aug” szerepel. Vegye figyelembe, hogy ez azokat a fájlokat is megtalálja, amelyek nevében az „Aug” szerepel.
rendezés +4n: A grep kimenetének rendezése a negyedik oszlopban (fájlméret).

Rendezett listát kapunk az összes augusztusban módosított fájlról (évtől függetlenül), fájlméret szerint növekvő sorrendben.

grep: Kevesebb parancs, több szövetséges

A grep egy nagyszerű eszköz, amely az Ön 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.

A grep és néhány reguláris kifejezés összekapcsolása – a fu valóban a következő szintre emeli.