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

Using Grep With Regular Expressions



Ez az oktatóanyag leírja mindkettő használatát markolat (és egrep) t o szöveget talál a fájlokban, egyszerű formában és reguláris kifejezésekkel kombinálva. Többet tartalmaz példák és feladatok , több megoldásokat , hogy a néző befejezze.

A név markolat a g/re/p ed (és vim) parancsból származik, ami azt jelenti, hogy globálisan keressük meg az adott reguláris kifejezést, és nyomtassuk (jelenítsük meg) 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 egy reguláris kifejezésnek ( regexp ). A reguláris kifejezés szövegből és egy vagy több 11 speciális karakterből álló keresési karakterlánc. Egy egyszerű példa a sor elejének illesztése.



Minta fájl

Alapformája markolat használható egyszerű szöveg megkeresésére egy adott fájlban vagy fájlokban. A példák kipróbálásához először hozza létre a mintafájlt.



Használjon szerkesztőt, például nano vagy vim, és másolja az alábbi szöveget egy fájlba fájlom .





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 az idézőjelek nem megfelelően másolhatók), a parancsokat be kell írni a megfelelő tanulás érdekében.

A példák kipróbálása előtt tekintse meg a mintafájlt:



$macskafájlom

Egyszerű keresés

Az „xyz” szöveg megkereséséhez a fájlban hajtsa végre a következőket:

$markolatxyz myfile

A színek használata

A színek megjelenítéséhez használja a –color (kettős kötőjelet) vagy egyszerűen hozzon létre egy álnevet. Például:

$markolat --színxyz myfile

vagy

$álnév markolat= 'markolat--szín'
$markolatxyz myfile

Lehetőségek

A markolat parancs tartalmazza:

  • -Minden sort megtalálok függetlenül esetről
  • -c számol hány sor tartalmazza a szöveget
  • -megjelenítési sor számokat megfelelő sorokból
  • -csak kijelző fájlt neveket azt a gyufát
  • -r rekurzív alkönyvtárak keresése
  • -v megtalálja az összes sort NEM tartalmazza a szöveget

Például:

$markolat -énxyz myfile# keressen szöveget a kis- és nagybetűktől függetlenül

$markolat -icxyz myfile# sorok számolása szöveggel

$markolat -ban benxyz myfile# sorszámok megjelenítése

Több fájl létrehozása

Mielőtt több fájlban keresne, először hozzon létre néhány új fájlt:

$kidobtaxyz>fájlom1
$kidobta -Ésxyz nxzz nXYZ>fájlom2
$kidobta -Ésxxx nyyy>fájlom3
$macskafájlom1
$macskafájlom2
$macskafájlom3

Keresés több fájlban

Ha több fájlban szeretne keresni fájlnevek vagy helyettesítő karakterek használatával, írja be:

$markolat -icxyz myfile myfile1 myfile2 myfile3
$markolat -ban benxyz my*
# egyezési fájlnév, amely „my” -vel kezdődik

I. gyakorlat

  1. Először számolja meg, hogy hány sor van az /etc /passwd fájlban.
Tipp: használatWC -az /stb./passwd
  1. Most keresse meg a szöveg összes előfordulását ahol az /etc /passwd fájlban .
  2. Keresse meg, hogy a fájl hány sora tartalmazza a szöveget
  3. Keresse meg, hogy hány sor NEM tartalmazza a szöveget ahol .
  4. Keresse meg a bejelentkezési bejegyzést a /etc/passwd

A gyakorlatok megoldásai a cikk végén találhatók.

Reguláris kifejezések használata

A parancs markolat rendszeres kifejezésekkel is használható, a tizenegy speciális karakter vagy szimbólum közül egyet vagy többet használva a keresés finomítására. A reguláris kifejezés olyan karakterlánc, amely speciális karaktereket tartalmaz, amelyek lehetővé teszik a minták illesztését a segédprogramokon, például markolat , jöttem és sed . Ne feledje, hogy a karakterláncokat idézőjelbe kell tenni.

A rendelkezésre álló speciális karakterek a következők:

^ Egy sor kezdete
$ Egy sor vége
. Bármilyen karakter (kivéve n újsor)
* 0 vagy több korábbi kifejezés
A szimbólum előtti szó szoros karakterré teszi

Ne feledje, hogy a *, amely a parancssorban tetszőleges számú karakter egyezésére használható, beleértve a semelyiket, az nem itt is ugyanúgy használják.

Vegye figyelembe az idézetek használatát is a következő példákban.

Példák

A ^ karakter használatával szöveggel kezdődő összes sor megkeresése:

$markolat'^Xyz' myfile

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

$markolat„Xyz $” fájlom

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

$markolat'^Xyz $' myfile

Sorok kereséséhez használja a . bármilyen karakterhez illeszkedik:

$markolat'^X.z' fájlom

Ha a * használatával szeretné megkeresni az előző kifejezés 0 vagy több sorának megfelelő sorokat:

$markolat'^Xy*z ’myfile

Sorok keresése a.* Használatával bármelyik karakter 0 vagy több egyezéséhez:

$markolat’^ X.*z ’myfile

Sorok kereséséhez használja a hogy elkerülje a * karaktert:

$markolat'^ X *z ’myfile

A karakter megkereséséhez használja:

$markolat'\' myfile

Grep kifejezés - egrep

Az markolat parancs csak a rendelkezésre álló reguláris kifejezések egy részhalmazát támogatja. Azonban a parancs egrep:

  • lehetővé teszi az összes reguláris kifejezés teljes használatát
  • egyszerre több kifejezést is kereshet

Ne feledje, hogy a kifejezéseket idézőjelek közé kell foglalni.

A színek használatához használja a –color billentyűt, vagy hozzon létre egy álnevet:

$álnév egrep='egrep --color'

Annak érdekében, hogy többet keressen regex az egrep parancs több sorban is írható. Ez azonban a speciális karakterek használatával is elvégezhető:

| Váltás, akár az egyik, akár a másik
(…) A kifejezés egy részének logikai csoportosítása
$egrep '(^root |^uucp |^mail)' /stb./passwd

Ez kivonja a fájlból a | szimbólum, amely bármelyik opciót jelenti.

A következő parancs lesz nem működik, bár üzenet nem jelenik meg, mivel az alap markolat parancs nem támogatja az összes reguláris kifejezést:

$markolat '(^root |^uucp |^mail)' /stb./passwd

A legtöbb Linux rendszeren azonban a parancs grep -E ugyanaz, mint a használata egrep :

$markolat -ÉS '(^root |^uucp |^mail)' /stb./passwd

Szűrők használata

Csővezeték az egyik parancs kimenetének bemenetként történő elküldése egy másik parancsba, és az egyik legerősebb Linux eszköz.

A folyamatban megjelenő parancsokat gyakran szűrőknek nevezik, mivel sok esetben átszitálják vagy módosítják a nekik átadott bemenetet, mielőtt a módosított adatfolyamot szabványos kimenetre küldik.

A következő példában a szabványos kimenet ls -l standard bemenetként kerül továbbításra a markolat parancs. Kimenet a markolat parancsot bemenetként továbbítja a több parancs.

Ez csak a könyvtárakat jeleníti meg /stb :

$ls -az /stb.|markolat'^D'|több

A következő parancsok példák a szűrők használatára:

$ps -hús|markolatcron

$ki|markolatkdm

Minta fájl

A felülvizsgálati gyakorlat kipróbálásához először hozza létre a következő mintafájlt.

Használjon szerkesztőt, például nano vagy vim, és másolja az alábbi szöveget egy fájlba emberek:

Személyes J.Smith 25000
Személyes E.Smith 25400
Képzés A.Brown 27500
Képzés C.Browen 23400
(Admin) R.Bron 30500
Goodsout T.Smyth 30000
Személyes F.Jones 25000
képzés* C.Evans 25500
Goodsout W. Pápa 30400
Földszint T.Smythe 30500
Személyzet J.Maler 33000

Gyakorlat II

  1. Jelenítse meg a fájlt emberek és megvizsgálja annak tartalmát.
  2. Keresse meg a karakterláncot tartalmazó összes sort Kovács Tipp: használja a grep parancsot, de ne feledje, hogy alapértelmezés szerint a kis- és nagybetűket megkülönbözteti.
  3. Hozzon létre egy új fájlt, npeople, amely tartalmazza a karakterlánccal kezdődő összes sort Személyes az emberek fájlban. Tipp: használja a grep parancsot a> gombbal.
  4. Erősítse meg a fájl tartalmát személyekkel a fájl felsorolásával.
  5. Most fűzze hozzá az összes sort, ahol a szöveg a karakterlánccal végződik 500 a fájlban emberek a fájlba npeople. Tipp: használja a grep parancsot a >> billentyűvel.
  6. Ismét erősítse meg a fájl tartalmát személyekkel a fájl felsorolásával.
  7. Keresse meg a fájlban tárolt szerver IP -címét /etc/hosts .Tipp: használja a grep parancsot a $ (hostname) paranccsal
  8. Használat egrep kivonni a /etc/passwd fájlt tartalmazó számlasorokat tartalmazza lp vagy a sajátját Felhasználói azonosító .

A gyakorlatok megoldásai a cikk végén találhatók.

Több reguláris kifejezés

A reguláris kifejezést a szteroidok helyettesítő karakterének lehet tekinteni.

Tizenegy speciális jelentésű karakter van: a nyitó és záró szögletes zárójel [], a fordított perjel , a caret ^, a dollárjel, a pont vagy a 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 különleges karaktereket gyakran metakaraktereknek is nevezik.

Itt található a speciális karakterek teljes készlete:

^ Egy sor kezdete
$ Egy sor vége
. Bármilyen karakter (kivéve n újsor)
* 0 vagy több korábbi kifejezés
| Váltás, akár az egyik, akár a másik
[…] Kifejezetten illeszkedő karakterkészlet
+ 1 vagy több korábbi kifejezés
? 0 vagy 1 az előző kifejezésben
A szimbólum előtti szó szoros karakterré teszi
{…} Kifejezett mennyiségi jelölés
(…) A kifejezés egy részének logikai csoportosítása

Az alapértelmezett verzió markolat csak korlátozottan támogatja a reguláris kifejezéseket. Annak érdekében, hogy az alábbi példák mindegyike működjön, használja egrep helyette vagy grep -E .

Sorok kereséséhez használja a | illeszkedjen bármelyik kifejezéshez:

$egrep'Xxz|xzz ’myfile

Sorok keresése a | használatával a karakterláncon belüli kifejezések egyezéséhez használja a () kifejezést is:

$egrep'^ X(Yz|yz)’Fájlom

Ha a [] használatával bármelyik karakterhez illeszkedő sorokat keres:

$egrep'^ X[Ja]z ’myfile

Ha a [] billentyűvel nem szeretne karaktereket találni:

$egrep'^ X[^ Igen]z ’myfile

Ha a * használatával szeretné megkeresni az előző kifejezés 0 vagy több sorának megfelelő sorokat:

$egrep'^Xy*z ’myfile

Ha a + billentyűvel szeretné megkeresni az előző kifejezés 1 vagy több sorának megfelelő sorokat:

$egrep'^Xy+z' fájlom

A sorok megkereséséhez használja a? megegyezik az előző kifejezés 0 vagy 1 kifejezésével:

$egrep'^Xy? Z' myfile

Gyakorlat III

  1. Keresse meg az összes sort, amely tartalmazza a neveket Evans vagy festő az aktában emberek.
  2. Keresse meg az összes sort, amely tartalmazza a neveket Smith, Smyth vagy Smythe az aktában emberek.
  3. Keresse meg az összes sort, amely tartalmazza a neveket Barna, Browen vagy Forrás az emberekben. Ha van ideje:
  4. Keresse meg a karakterláncot tartalmazó sort (admin), beleértve a zárójeleket, a fájlban az emberek.
  5. Keresse meg a * karaktert tartalmazó sort az emberek fájlban.
  6. A fenti 5. és 6. kombinációval mindkét kifejezést megtalálja.

További példák

Vonalak keresése a használatával . és * bármilyen karakterkészlethez illeszkedik:

$egrep'^Xy.*z ’myfile

Ha sorokat szeretne keresni a {} használatával, hogy megfeleljen N számú karakternek:

$egrep'^Xy{3}z ’myfile
$egrep'^Xy{4}z ’myfile

Ha sorokat szeretne keresni a {} használatával, hogy megfeleljen N vagy több alkalommal:

$egrep'^Xy{3,}z ’myfile

Ha sorokat szeretne keresni a {} használatával, hogy megfeleljen N -szer, de legfeljebb M -szer:

$egrep'^Xy{2,3}z ’myfile

Következtetés

Ebben az oktatóanyagban először a használatát néztük meg markolat egyszerű formában szöveget talál egy fájlban vagy több fájlban. Ezután a keresendő szöveget egyszerű reguláris kifejezésekkel, majd összetettebb kifejezésekkel kombináltuk egrep .

Következő lépések

Remélem, hogy hasznosítani fogja az itt szerzett ismereteket. Kipróbál markolat parancsokat a saját adataira, és ne feledje, az itt leírt reguláris kifejezések ugyanabban a formában használhatók mi , sed és awk !

Gyakorlati megoldások

I. gyakorlat

Először számolja meg, hány sor van a fájlban /etc/passwd .
$ wc -l /etc/passwd
Most keresse meg a szöveg összes előfordulását ahol az /etc /passwd fájlban.
$ grep var /etc/passwd
Keresse meg, hogy a fájl hány sora tartalmazza a szöveget ahol

markolat -cahol/stb./passwd

Keresse meg, hogy hány sor NEM tartalmazza a szöveget ahol .

markolat -önéletrajzahol/stb./passwd

Keresse meg a bejelentkezési bejegyzést a /etc/passwd fájlt
grep kdm /etc/passwd

Gyakorlat II

Jelenítse meg a fájlt emberek és megvizsgálja annak tartalmát.
$ cat people
Keresse meg a karakterláncot tartalmazó összes sort Kovács az aktában emberek .
$ grep 'Smith' people
Hozzon létre egy új fájlt, n emberek , amely a karakterlánccal kezdődő összes sort tartalmazza Személyes ban,-ben emberek fájlt
$ grep '^Personal' people> npeople
Erősítse meg a fájl tartalmát n emberek a fájl felsorolásával.
$ cat npeople
Most fűzze hozzá az összes sort, ahol a szöveg a karakterlánccal végződik 500 az aktában emberek a fájlhoz n emberek .
$ grep '500$' people>>npeople
Ismét erősítse meg a fájl tartalmát n emberek a fájl felsorolásával.
$ cat npeople
Keresse meg a fájlban tárolt szerver IP -címét /etc/hosts .
$ grep $(hostname) /etc/hosts
Használat egrep kivonni a /etc/passwd fájlt tartalmazó számlasorokat tartalmazza lp vagy a saját felhasználói azonosítóját.
$ egrep '(lp|kdm:)' /etc/passwd

Gyakorlat III

Keresse meg az összes sort, amely tartalmazza a neveket Evans vagy festő az aktában emberek .
$ egrep 'Evans|Maler' people
Keresse meg az összes sort, amely tartalmazza a neveket Kovács , Smyth vagy Smythe az aktában emberek .
$ egrep 'Sm(i|y)the?' people
Keresse meg az összes sort, amely tartalmazza a neveket Barna , Browen vagy Forrás az aktában emberek.
$ egrep 'Brow?e?n' people
Keresse meg a karakterláncot tartalmazó sort (admin), a zárójeleket is beleértve a fájlban emberek .

$egrep ' (Rendszergazda )'emberek

Keresse meg a karaktert tartalmazó sort * az aktában emberek.
$ egrep '*' people
A fenti 5. és 6. kombinációval mindkét kifejezést megtalálja.

$egrep ' (Adminisztrátor ) | *'emberek