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 myfileA 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 myfilevagy
$á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
- 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 ahol az /etc /passwd fájlban .
- Keresse meg, hogy a fájl hány sora tartalmazza a szöveget
- Keresse meg, hogy hány sor NEM tartalmazza a szöveget ahol .
- 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' myfileAz összes szöveggel végződő sor megkeresése a $ karakter használatával:
$markolat„Xyz $” fájlomA ^ és $ karaktereket tartalmazó karakterláncot tartalmazó sorok megkeresése:
$markolat'^Xyz $' myfileSorok kereséséhez használja a . bármilyen karakterhez illeszkedik:
$markolat'^X.z' fájlomHa a * használatával szeretné megkeresni az előző kifejezés 0 vagy több sorának megfelelő sorokat:
$markolat'^Xy*z ’myfileSorok keresése a.* Használatával bármelyik karakter 0 vagy több egyezéséhez:
$markolat’^ X.*z ’myfileSorok kereséséhez használja a hogy elkerülje a * karaktert:
$markolat'^ X *z ’myfileA karakter megkereséséhez használja:
$markolat'\' myfileGrep 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 |
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./passwdA legtöbb Linux rendszeren azonban a parancs grep -E ugyanaz, mint a használata egrep :
$markolat -ÉS '(^root |^uucp |^mail)' /stb./passwdSzű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öbbA következő parancsok példák a szűrők használatára:
$ps -hús|markolatcron $ki|markolatkdmMinta 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 25000Szemé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
- Jelenítse meg a fájlt emberek és megvizsgálja annak tartalmát.
- 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.
- 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.
- Erősítse meg a fájl tartalmát személyekkel a fájl felsorolásával.
- 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.
- Ismét erősítse meg a fájl tartalmát személyekkel a fájl felsorolásával.
- Keresse meg a fájlban tárolt szerver IP -címét /etc/hosts .Tipp: használja a grep parancsot a $ (hostname) paranccsal
- 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 ’myfileSorok 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ájlomHa a [] használatával bármelyik karakterhez illeszkedő sorokat keres:
$egrep'^ X[Ja]z ’myfileHa a [] billentyűvel nem szeretne karaktereket találni:
$egrep'^ X[^ Igen]z ’myfileHa a * használatával szeretné megkeresni az előző kifejezés 0 vagy több sorának megfelelő sorokat:
$egrep'^Xy*z ’myfileHa a + billentyűvel szeretné megkeresni az előző kifejezés 1 vagy több sorának megfelelő sorokat:
$egrep'^Xy+z' fájlomA sorok megkereséséhez használja a? megegyezik az előző kifejezés 0 vagy 1 kifejezésével:
$egrep'^Xy? Z' myfileGyakorlat III
- Keresse meg az összes sort, amely tartalmazza a neveket Evans vagy festő az aktában emberek.
- Keresse meg az összes sort, amely tartalmazza a neveket Smith, Smyth vagy Smythe az aktában emberek.
- Keresse meg az összes sort, amely tartalmazza a neveket Barna, Browen vagy Forrás az emberekben. Ha van ideje:
- Keresse meg a karakterláncot tartalmazó sort (admin), beleértve a zárójeleket, a fájlban az emberek.
- Keresse meg a * karaktert tartalmazó sort az emberek fájlban.
- 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 ’myfileHa 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 ’myfileHa sorokat szeretne keresni a {} használatával, hogy megfeleljen N -szer, de legfeljebb M -szer:
$egrep'^Xy{2,3}z ’myfileKö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
Keresse meg, hogy hány sor NEM tartalmazza a szöveget ahol .
markolat -önéletrajzahol/stb./passwdKeresse 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 .
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.