grep

A grep (és az egrep) használata a reguláris kifejezésekkel

A grep (és az egrep) használata a reguláris kifejezésekkel
Ez az oktatóanyag leírja mindkettő használatát grep (és egrep) to megtalálja a szöveget fájlokban, egyszerű formában és szabályos kifejezésekkel kombinálva. Többet tartalmaz példák és feladatok, plusz megoldások, hogy a néző befejezze.

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.

xyz
xyzde
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 myfile

vagy

$ alias grep = 'grep --color'
$ grep xyz myfile

Opciók

A grep parancs tartalmazza:

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

  1. Először számolja meg, hogy hány sor van az / etc / passwd fájlban.
Tipp: használja a wc -l / etc / passwd parancsot
  1. Most keresse meg a szöveg összes előfordulását var az / etc / passwd fájlban.
  2. Megtalálja, hogy a fájl hány sora tartalmazza a szöveget
  3. Megtalálja, hogy hány sor NEM tartalmazza a szöveget var.
  4. 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' myfile

Az összes szöveggel végződő sor megkeresése a $ karakter használatával:

$ grep 'xyz $' myfile

A ^ és $ karaktereket egyaránt tartalmazó karakterláncot tartalmazó sorok megkeresése:

$ grep '^ xyz $' myfile

A 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' myfile

A vonalak megtalálásához .* 0 vagy annál több karakter illesztése:

$ grep '^ x.* z 'myfile

A vonalak megkereséséhez a \ a * karakter elől menekülni:

$ grep '^ x \ * z' myfile

A \ 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:

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
$ egrep '(^ root | ^ uucp | ^ mail)' / etc / passwd

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 / passwd

A 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 25000
Szemé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

  1. Jelenítse meg a fájlt emberek és megvizsgálja annak tartalmát.
  2. 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.
  3. 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.
  4. A fájl felsorolásával erősítse meg a npeople fájl tartalmát.
  5. 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.
  6. Ismét erősítse meg a fájl tartalmát a npeople a fájl felsorolásával.
  7. Keresse meg a fájlban tárolt kiszolgáló IP-címét / etc / hosts.Tipp: használja a grep parancsot $ (gazdagépnévvel)
  8. 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' myfile

A 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ájl

Ha sorokat szeretne keresni a [] segítségével, hogy NEM illeszkedjen egyetlen karakterhez sem:

$ egrep '^ x [^ Yy] z' sajátfájl

Ha 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' myfile

A vonalak megkereséséhez a ? hogy megfeleljen az előző kifejezés 0-nak vagy 1-nek:

$ egrep '^ xy?z 'myfile

III. Gyakorlat

  1. Keresse meg az összes sort, amely tartalmazza a neveket Evans vagy Maler az aktában emberek.
  2. Keresse meg az összes nevet tartalmazó sort Smith, Smyth vagy Smythe az aktában emberek.
  3. Keresse meg az összes sort, amely tartalmazza a neveket Brown, Browen vagy Bron az aktában emberek.Ha ráérsz:
  4. Keresse meg a húrt tartalmazó sort (admin), beleértve a zárójeleket is, az aktában lévő emberek.
  5. Keresse meg a * karaktert tartalmazó sort az emberek fájljában.
  6. 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 'myfile

Ha 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ájl

A (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

grep -c var / etc / passwd

Megtalálja, hogy hány sor NEM tartalmazza a szöveget var.

grep -cv var / etc / passwd

Keresse meg a bejelentkezés bejegyzését a / etc / passwd fájl
grep 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.

$ egrep '\ (Admin \)' 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.

$ egrep '\ (Rendszergazda \) | \ *' emberek


HD Remastered Games for Linux, amelyeknek soha nem volt korábban Linux kiadásuk
Számos játékfejlesztő és kiadó a régi játékok HD remasterjével áll elő a franchise élettartamának meghosszabbítása érdekében. Kérjük, hogy a rajongók ...
Az AutoKey használata a Linux játékok automatizálásához
Az AutoKey egy asztali automatizáló segédprogram Linux és X11 rendszerekhez, Python 3, GTK és Qt programozással. A parancsfájlok és a MACRO funkcióina...
Az FPS-számláló megjelenítése a Linux-játékokban
A Linux játék komoly lendületet kapott, amikor a Valve 2012-ben bejelentette a Linux támogatását a Steam kliensnek és játékaiknak. Azóta sok AAA és in...