A név grep az ed (és vim) „g / re / p” parancsból származik, ami globálisan keres egy adott reguláris kifejezést és kinyomtatja (megjeleníti) a kimenetet.
Szabályos Kifejezések
A segédprogramok lehetővé teszik a felhasználó számára, hogy szöveges fájlokban keressen olyan sorokat, amelyek megfelelnek a reguláris kifejezésnek (regexp). A reguláris kifejezés egy szövegből és 11 speciális karakterből egy vagy többből álló keresési karakterlánc. Egyszerű példa a sor elejének illesztése.
Mintafájl
A grep felhasználható egyszerű szöveg megkeresésére egy adott fájlban vagy fájlokban. A példák kipróbálása érdekében először hozza létre a minta fájlt.
Használjon olyan szerkesztőt, mint a nano vagy a vim, hogy az alábbi szöveget átmásolja az úgynevezett fájlba myfile.
xyzxyzde
exyzd
dexyz
d?gxyz
xxz
xzz
x \ z
x * z
xz
x z
XYZ
XYYZ
xYz
xyyz
xyyyz
xyyyyz
Bár másolhatja és beillesztheti a példákat a szövegbe (ne feledje, hogy a dupla idézőjelek nem megfelelően másolódnak), a parancsokat be kell írni, hogy megfelelően megtanulják őket.
A példák kipróbálása előtt tekintse meg a minta fájlt:
$ cat myfile
Egyszerű keresés
Az 'xyz' szöveg megkereséséhez a fájlban futtassa a következőket:
$ grep xyz myfile
Színek használata
A színek megjelenítéséhez használja a -color (kettős kötőjel) parancsot, vagy egyszerűen hozzon létre egy álnevet. Például:
$ grep --color xyz myfilevagy
$ alias grep = 'grep --color'$ grep xyz myfile
Opciók
A grep parancs tartalmazza:
- -minden sort megtalálok függetlenül attól eset
- -c számol hány sor tartalmazza a szöveget
- -n megjelenítési vonal számok illeszkedő vonalak
- -Csak kijelzés fájl nevek az a meccs
- -r rekurzív alkönyvtárak keresése
- -v megtalálja az összes sort NEM a szöveget tartalmazó
Például:
$ grep -i xyz myfile # szöveg keresése, esetektől függetlenül$ grep -ic xyz myfile # sorokat számlál szöveggel
$ grep -in xyz myfile # sorszámok megjelenítése
Hozzon létre több fájlt
Mielőtt több fájlban keresne, először hozzon létre több új fájlt:
$ echo xyz> myfile1$ echo -e “xyz \ nxzz \ nXYZ”> sajátfájl2
$ echo -e „xxx \ nyyy”> sajátfájl3
$ cat myfile1
$ cat myfile2
$ cat myfile3
Keresés több fájlban
Több fájl kereséséhez fájlnév vagy helyettesítő karakter használatával írja be:
$ grep -ic xyz sajátfájl myfile1 myfile2 myfile3$ grep -in xyz my *
# egyezik a „my” kezdetű fájlnévvel
I. gyakorlat
- Először számolja meg, hogy hány sor van az / etc / passwd fájlban.
- Most keresse meg a szöveg összes előfordulását var az / etc / passwd fájlban.
- Megtalálja, hogy a fájl hány sora tartalmazza a szöveget
- Megtalálja, hogy hány sor NEM tartalmazza a szöveget var.
- Keresse meg a bejelentkezés bejegyzését a / etc / passwd
Gyakorlási megoldások a cikk végén találhatók.
A reguláris kifejezések használata
A parancs grep szabályos kifejezésekkel is használható, a tizenegy speciális karakter vagy szimbólum közül egy vagy több felhasználásával a keresés finomítása. A reguláris kifejezés olyan karakterlánc, amely speciális karaktereket tartalmaz, hogy lehetővé tegye a minták egyeztetését az olyan segédprogramokon belül, mint a grep, vim és sed. Vegye figyelembe, hogy a húrokat esetleg idézőjelek közé kell tenni.
A rendelkezésre álló speciális karakterek a következők:
^ | Vonal kezdete |
$ | Egy sor vége |
. | Bármely karakter (\ n új sor kivételével) |
* | 0 vagy több az előző kifejezésből |
\ | A szimbólum elõtt szó szerinti jellé válik |
Ne feledje, hogy a *, amelyet a parancssorban tetszőleges számú karakterhez illeszthet, beleértve a semmit sem, igen nem itt ugyanúgy használják.
Vegye figyelembe az idézetek használatát a következő példákban.
Példák
Az összes szöveggel kezdődő sor megtalálása a ^ karakter használatával:
$ grep '^ xyz' myfileAz összes szöveggel végződő sor megkeresése a $ karakter használatával:
$ grep 'xyz $' myfileA ^ és $ karaktereket egyaránt tartalmazó karakterláncot tartalmazó sorok megkeresése:
$ grep '^ xyz $' myfileA vonalak megkereséséhez a . bármely karakterhez illeszkedni:
$ grep '^ x.z 'myfile
Ha meg szeretné találni a * kifejezés használatával az előző kifejezés 0 vagy több pontjának megfelelőt:
$ grep '^ xy * z' myfileA vonalak megtalálásához .* 0 vagy annál több karakter illesztése:
$ grep '^ x.* z 'myfileA vonalak megkereséséhez a \ a * karakter elől menekülni:
$ grep '^ x \ * z' myfileA \ karakter használata:
$ grep '\\' myfile
Kifejezés grep - egrep
A grep A parancs csak a rendelkezésre álló reguláris kifejezések egy részhalmazát támogatja. A parancs azonban egrep:
- lehetővé teszi az összes reguláris kifejezés teljes használatát
- egyszerre több kifejezést is kereshet
Vegye figyelembe, hogy a kifejezéseket idézőjelek közé kell tenni.
A színek használatához használja a -color parancsot, vagy hozzon létre ismét álnevet:
$ alias egrep = 'egrep --color'Több keresése érdekében regex a egrep parancs több sorra is írható. Ez azonban a következő speciális karakterek használatával is megtehető:
| | Váltakozás, egyik vagy másik |
(…) | Egy kifejezés egy részének logikai csoportosítása |
Ez kivonja a root, uucp vagy mail kezdetű sorokat a fájlból, a | szimbólum, amely az egyik opciót jelenti.
A következő parancs megteszi nem munka, bár üzenet nem jelenik meg, mivel az alap grep a parancs nem támogatja az összes reguláris kifejezést:
$ grep '(^ root | ^ uucp | ^ mail)' / etc / passwdA legtöbb Linux rendszeren azonban a parancs grep -E ugyanaz, mint a használata egrep:
$ grep -E '(^ root | ^ uucp | ^ mail)' / etc / passwd
Szűrők használata
Csővezeték az a folyamat, amikor az egyik parancs kimenetét bemenetként elküldik egy másik parancsba, és ez az elérhető egyik leghatékonyabb Linux eszköz.
A folyamatban megjelenő parancsokat gyakran szűrőknek nevezik, mivel sok esetben szétválogatják vagy módosítják a nekik továbbított bemenetet, mielőtt a módosított adatfolyamot normál kimenetre küldenék.
A következő példában a normál kimenet a ls -l szabványos bemenetként kerül továbbításra a grep parancs. Kimenet a grep parancsot továbbítja a bemenetként a több parancs.
Ez csak a könyvtárakat jeleníti meg /stb:
$ ls -l / etc | grep '^ d' | tovább
A következő parancsok példák a szűrők használatára:
$ ps -ef | grep cron$ ki | grep kdm
Mintafájl
A felülvizsgálat kipróbálása érdekében először hozza létre a következő mintafájlt.
Használjon olyan szerkesztőt, mint a nano vagy a vim, hogy az alábbi szöveget átmásolja az úgynevezett fájlba emberek:
Személyes J.Smith 25000Személyes E.Smith 25400
Képzés.Barna 27500
C képzés.Browen 23400
(Rendszergazda) R.Bron 30500
Goodsout T.Szmossz 30000
Személyes F.Jones 25000
képzés * C.Evans 25500
Goodsout W.30400 pápa
Földszint T.Smythe 30500
Személyes J.Maler 33000
II. Gyakorlat
- Jelenítse meg a fájlt emberek és megvizsgálja annak tartalmát.
- Keresse meg az összes sort, amely tartalmazza a karakterláncot Kovács az aktában emberek.Tipp: használja a grep parancsot, de ne feledje, hogy alapértelmezés szerint a kis- és nagybetűk különböznek egymástól.
- Hozzon létre egy új fájlt (npeople), amely tartalmazza a karakterlánccal kezdődő összes sort Személyes az emberek aktájában.Tipp: használja a grep parancsot a> gombbal.
- A fájl felsorolásával erősítse meg a npeople fájl tartalmát.
- Most csatolja az összes sort, ahol a szöveg a karakterlánccal végződik 500 a fájlban az emberek a fájl npeople fájlba.Tipp: használja a grep parancsot a >> paranccsal.
- Ismét erősítse meg a fájl tartalmát a npeople a fájl felsorolásával.
- Keresse meg a fájlban tárolt kiszolgáló IP-címét / etc / hosts.Tipp: használja a grep parancsot $ (gazdagépnévvel)
- Használat egrep kivonni a / etc / passwd fájlfiók sorok, amelyek tartalmazzák lp vagy a sajátod Felhasználói azonosító.
Gyakorlati megoldások a cikk végén találhatók.
További reguláris kifejezések
A szabályos kifejezés a szteroidok helyettesítő karakterének tekinthető.
Tizenegy különleges jelentéssel rendelkező karakter van: kezdő és záró szögletes zárójel [], hátsó perjel \, caret ^, dollárjel $, pont vagy pont ., a függőleges sáv vagy cső szimbólum |, a kérdőjel ?, csillag vagy csillag *, a pluszjel +, valamint a nyitó és záró kerek zárójel . Ezeket a speciális karaktereket gyakran metakaraktereknek is nevezik.
Itt található a speciális karakterek teljes készlete:
^ | Vonal kezdete |
$ | Vonal vége |
. | Bármely karakter (\ n új sor kivételével) |
* | 0 vagy több az előző kifejezésből |
| | Váltakozás, egyik vagy másik |
[…] | Kifejezett karakterkészlet az egyezéshez |
+ | 1 vagy több előző kifejezés |
? | 0 vagy 1 az előző kifejezésből |
\ | A szimbólum elõtt szó szerinti jellé válik |
… | Kifejezett mennyiségi jelölés |
(…) | Egy kifejezés egy részének logikai csoportosítása |
A. Alapértelmezett verziója grep csak korlátozott a reguláris kifejezés támogatása. Az alábbi példák mindegyikének működése érdekében használja a következőt: egrep helyett vagy grep -E.
A vonalak megkereséséhez a | hogy megfeleljen bármelyik kifejezésnek:
$ egrep 'xxz | xzz' myfileA vonalak megkeresése a | hogy bármelyik kifejezést egy sztringen belül illessze, használja a () -t is:
$ egrep '^ x (Yz | yz)' sajátfájl
Ha vonalakra kíváncsi a [] gombbal bármely karakterhez:
$ egrep '^ x [Yy] z' sajátfájlHa sorokat szeretne keresni a [] segítségével, hogy NEM illeszkedjen egyetlen karakterhez sem:
$ egrep '^ x [^ Yy] z' sajátfájlHa meg szeretné találni a * kifejezés használatával az előző kifejezés 0 vagy több pontjának megfelelőt:
$ egrep '^ xy * z' myfile
A + kifejezés használatával az előző kifejezés 1 vagy többjéhez illeszkedő sorok kereshetők:
$ egrep '^ xy + z' myfileA vonalak megkereséséhez a ? hogy megfeleljen az előző kifejezés 0-nak vagy 1-nek:
$ egrep '^ xy?z 'myfile
III. Gyakorlat
- Keresse meg az összes sort, amely tartalmazza a neveket Evans vagy Maler az aktában emberek.
- Keresse meg az összes nevet tartalmazó sort Smith, Smyth vagy Smythe az aktában emberek.
- Keresse meg az összes sort, amely tartalmazza a neveket Brown, Browen vagy Bron az aktában emberek.Ha ráérsz:
- Keresse meg a húrt tartalmazó sort (admin), beleértve a zárójeleket is, az aktában lévő emberek.
- Keresse meg a * karaktert tartalmazó sort az emberek fájljában.
- A fenti 5. és 6. kombinálásával megtalálja mindkét kifejezést.
További példák
A vonalak megtalálásához . és * bármely karakterkészlethez illeszkedik:
$ egrep '^ xy.* z 'myfileHa sorokat szeretne találni a (z) paranccsal N karakterszám egyezéséhez:
$ egrep '^ xy 3 z' sajátfájl$ egrep '^ xy 4 z' sajátfájl
Ha sorokat szeretne találni a (z) paranccsal, hogy N vagy többször megfeleljen:
$ egrep '^ xy 3, z' sajátfájlA (z) használatával N-szeres, de legfeljebb M-szerű vonalak keresése:
$ egrep '^ xy 2,3 z' sajátfájl
Következtetés
Ebben az oktatóanyagban először a használatát néztük meg grep egyszerű formában szöveget találni egy fájlban vagy több fájlban. Ezután kombináltuk a keresendő szöveget egyszerű reguláris kifejezésekkel, majd a bonyolultabb kifejezésekkel egrep.
Következő lépések
Remélem, hogy hasznosítani fogja az itt megszerzett ismereteket. Kipróbál grep parancsokat a saját adatairól, és ne feledje, hogy az itt leírt reguláris kifejezéseket ugyanabban a formában lehet használni vi, sed és awk!
Gyakorlási megoldások
I. gyakorlat
Először számolja meg, hogy hány sor van a fájlban / etc / passwd.$ wc -l / etc / passwd
Most keresse meg a szöveg összes előfordulását var az / etc / passwd fájlban.$ grep var / etc / passwd
Megtalálja, hogy a fájl hány sora tartalmazza a szöveget var
Megtalálja, hogy hány sor NEM tartalmazza a szöveget var.
grep -cv var / etc / passwdKeresse meg a bejelentkezés bejegyzését a / etc / passwd fájlgrep kdm / etc / passwd
II. Gyakorlat
Jelenítse meg a fájlt emberek és megvizsgálja annak tartalmát.$ macska emberek
Keresse meg az összes sort, amely tartalmazza a karakterláncot Kovács az aktában emberek.$ grep 'Smith' emberek
Hozzon létre egy új fájlt, npeople, amely tartalmazza a húrral kezdődő összes sort Személyes ban,-ben emberek fájl$ grep '^ Személyes' emberek> npeople
Erősítse meg a fájl tartalmát npeople a fájl felsorolásával.$ macska npeople
Most csatolja az összes sort, ahol a szöveg a karakterlánccal végződik 500 az aktában emberek az aktába npeople.$ grep '500 $' ember >> emberek
Ismét erősítse meg a fájl tartalmát npeople a fájl felsorolásával.$ macska npeople
Keresse meg a fájlban tárolt kiszolgáló IP-címét / etc / hosts.$ grep $ (hostname) / etc / hosts
Használat egrep kivonni a / etc / passwd fájlfiók sorok, amelyek tartalmazzák lp vagy a saját felhasználói azonosítóját.$ egrep '(lp | kdm :)' / etc / passwd
III. Gyakorlat
Keresse meg az összes sort, amely tartalmazza a neveket Evans vagy Maler az aktában emberek.$ egrep 'Evans | Maler' emberek
Keresse meg az összes sort, amely tartalmazza a neveket Kovács, Smyth vagy Smythe az aktában emberek.$ egrep 'Sm (i | y) a?' emberek
Keresse meg az összes sort, amely tartalmazza a neveket Barna, Browen vagy Bron az aktában emberek.$ egrep 'Szemöldök?e?n 'emberek
Keresse meg a húrt tartalmazó sort (admin), beleértve a zárójeleket is emberek.
Keresse meg a karaktert tartalmazó sort * az aktában emberek.$ egrep '\ *' emberek
A fenti 5. és 6. kombinálásával megtalálja mindkét kifejezést.