grep

Karakterláncok keresése szövegfájlokban a grep használatával reguláris kifejezéssel

Karakterláncok keresése szövegfájlokban a grep használatával reguláris kifejezéssel
A grep az egyik legnépszerűbb eszköz a szöveges fájlokban lévő karakterláncok keresésére és megkeresésére. A „grep” név a már elavult Unix ed sorszerkesztő eszköz parancsából származik - az ed parancs a kereséshez globálisan fájlon keresztül a reguláris kifejezés és akkor nyomtatás azok a vonalak voltak g / re / p, ahol re volt az a reguláris kifejezés, amelyet használna. Végül a grep parancsot arra írták, hogy ezt a keresést fájlon végezze el, amikor nem használja az ed-t.

Ebben a cikkben megmutatjuk, hogy futtasson előre sztring keresést a Grep használatával reguláris kifejezéssel, 10 gyakorlati példával megadva a megvalósításait. Az ebben a cikkben tárgyalt számos példának gyakorlati következményei vannak, vagyis felhasználhatja őket a napi Linux programozás során. Az alábbi minták néhány regexp példát írnak le a gyakran keresett mintákra.

1. példa: Keressen egyetlen bérlőt egy szövegfájlban

Írja be a következőket:

$ grep '\ $' könyv

2. példa: Keressen egyetlen karakterláncot egy szövegfájlban

A „könyv” fájl sorainak kimenetéhez, amely tartalmazza a „$ 14” karakterláncot.99 ”, típus:

$ grep '\ $ 14 \.99 'könyv

3. példa: Keressen egyetlen speciális bérlőt egy szövegfájlban

Írja be a következőket:

$ grep '\\' könyv

4. példa: Vonalak egyezése bizonyos szöveggel kezdődően

Használja a 'ˆ'-t egy regexp-ben a sor elejének jelölésére.

Az összes / "usr / dict / words" "pro" betűvel kezdődő sor kiadásához írja be a következőt:

$ grep 'ˆpro' / usr / dict / words

A „könyv” fájl összes olyan sorának kimenetéhez, amely az „elején” szöveggel kezdődik, esetektől függetlenül írja be:

$ grep -i 'az elején' könyvben

JEGYZET: Ezeket a kifejezéseket 'karakterekkel idézzük; ez azért van, mert egyes héjak egyébként a „ˆ” karaktert speciális „metakarakterként” kezelik

A szó- és kifejezéskeresések mellett a grep segítségével komplex szövegmintákat kereshet, amelyeket reguláris kifejezéseknek nevezünk. A reguláris kifejezés vagy a „regexp” egy speciális karaktereket tartalmazó karakterlánc, amely megadja a készlet megfelelő mintákat.

Technikailag szólva a szó- vagy kifejezésminták reguláris kifejezések, csak nagyon egyszerűek. Rendszeres kifejezésben a legtöbb karakter - beleértve a betűket és számokat is - önmagát képviseli. Például a regexp minta 1 egyezik az '1' karakterlánccal és a mintával fiú megfelel a "fiú" húrnak.

Számos lefoglalt karakter, metakarakter, úgynevezett karakter, amely nem képviseli önmagát egy reguláris kifejezésben, de van egy speciális jelentése, amelyet összetett minták felépítésére használnak. Ezek a metakarakterek a következők: ., *, [, ], ˆ, $ és \. Jó megjegyezni, hogy az ilyen metakarakterek szinte az összes elterjedt és speciális Linux disztribúció között elterjedtek. Itt van egy jó cikk, amely a metakarakterek speciális jelentéseivel foglalkozik, és példákat ad azok használatára.

5. példa: A szövegek befejezése bizonyos szövegekkel

Használja a '$' karaktert az idézett szöveg utolsó karaktereként, hogy csak a sor végén illeszkedjen a szöveghez. A felkiáltójellel végződő "megy" fájl sorainak kimenetéhez írja be:

$ grep '!$ 'megy

6. példa: Bizonyos hosszúságú vonalak illesztése

Egy adott hosszúságú vonalak egyezéséhez használja ezt a '.'karakterek' and 'és' $ 'között - például, ha az összes két karakter (vagy oszlop) szélességű sort meg akarja egyezni, használja a' ˆ… $ 'kifejezést a kereséshez.

Az összes, pontosan három karakter szélességű "/ usr / dict / words" sor kimenetéhez írja be:

$ grep 'ˆ… $' / usr / dict / words

Hosszabb soroknál hasznosabb egy másik konstrukció használata: 'ˆ.\ szám \ $ ', ahol a szám az egyezni kívánt sorok száma. Használja a ',' számtartomány megadását.

Az összes, pontosan tizenkét karakter szélességű "/ usr / dict / words" sor kimenetéhez írja be:

$ grep 'ˆ.\ 12 \ $ '/ usr / dict / words

Az '/ usr / dict / words' összes olyan sorának kimenetéhez, amely huszonkét vagy több karakter széles, írja be:

$ grep 'ˆ.\ 22, \ $ '/ usr / dict / words

7. példa: Megfelelő vonalak, amelyek tartalmaznak néhány regexps-t

A számos regexps bármelyikét tartalmazó sorok egyezéséhez adja meg az egyes regexps-eket, hogy keressen a váltakozó operátorok között ('\ |'), mint regexet a keresésre. Az adott regexps bármelyikét tartalmazó sorok kimenetre kerülnek.

A „playboy” összes sorának kiadásához, amely tartalmazza a „könyv” vagy a „torta” mintákat, írja be:

$ grep 'a könyv \ | torta' playboy

8. példa: Összehasonlító vonalak, amelyek tartalmazzák az összes regexps-t

Megfelelő vonalak kimenetére minden számos regexps közül a grep segítségével adja meg azokat a sorokat, amelyek tartalmazzák az első egyeztetni kívánt regexet, és csatolja a kimenetet egy grep-hez, a második regexp-kel argumentumként. Folytassa a csövek hozzáadását az összes keresni kívánt regexps kereséséhez.

A „lejátszási lista” összes sorának kimenetéhez, amely a „part” és az „ég” mintákat is tartalmazza, esetektől függetlenül írja be:

$ grep -i 'a parton' lejátszási lista | grep-ég

9. példa: Egyező vonalak, amelyek csak bizonyos karaktereket tartalmaznak

A csak bizonyos karaktereket tartalmazó sorok egyezéséhez használja a 'ˆ [characters] * $' regexp szót, ahol a karakterek illenek össze.  Ha csak 'magánhangzókat tartalmazó' / usr / dict / words 'sorokat szeretne kimenni, írja be a következőt:

$ grep -i 'ˆ [aeiou] * $' / usr / dict / words

Az '-i' opció megkülönbözteti a karaktereket, kis- és nagybetűktől függetlenül; tehát ebben a példában az összes magánhangzó karakter egyezik, esetektől függetlenül.

Péld 10: Mondatok keresése a távolságtól függetlenül

Az egyik módja annak, hogy olyan kifejezést keressen, amely a szóközök között, vagy a sorok vagy az oldalszakaszok között extra szóközökkel fordulhat elő, az, hogy eltávolítja az összes sortáblát és extra szóközt a bemenetből, majd megragadja azt. Ehhez csatolja a bemenetet tr-be, argumentumként a "\ r \ n: \> \ | -" argumentummal a '-d' opcióra (az összes sortörés eltávolítása a bemenetből); csatolja az fmt szűrőhöz az '-u' opcióval (a szöveget egyenletes távolsággal írja ki); és cső, hogy fogd a mintát keresni.

Ha a "docs" fájlban egyidejűleg szeretne keresni a "sztring" sorban, írja be a következőt:

$ cat docs | tr -d '\ r \ n: \> \ |
-"| fmt -u | grep "egyidejűleg"

Összegzés

Ebben a cikkben 10 gyakorlati példát tekintettünk át a Grep Linux parancs használatára a szöveges fájlban lévő karakterláncok keresésére és megtalálására. Útközben megtanultuk, hogyan használjunk rendszeres kifejezéseket a Greppel együtt, hogy összetett kereséseket hajtsunk végre a szöveges fájlokban. Mostanra már jobb ötlete van arról, hogy milyen hatékonyak a Linux keresési funkciók.

Íme további források azok számára, akik többet szeretnének megtudni a Linux programozásáról:

Források a rendszergazdák számára

Források Linux kernel programozók számára

Linux fájlrendszeri szótár

Átfogó áttekintés a Linux fájl- és címtárrendszer működéséről

AppyMouse képernyős Trackpad és egérmutató a Windows táblagépekhez
A táblagép-felhasználók gyakran hiányolják az egérmutatót, különösen akkor, ha szokták használni a laptopokat. Az érintőképernyős okostelefonok és táb...
Az egér középső gombja nem működik a Windows 10 rendszerben
A középső egérgomb segít átgörgetni a hosszú weboldalakat és a sok adatot tartalmazó képernyőket. Ha ez leáll, akkor a billentyűzet segítségével görge...
Hogyan lehet megváltoztatni a bal és jobb egérgombokat a Windows 10 PC-n
Elég általános, hogy az összes számítógépes egéreszközt ergonómikusan a jobbkezes felhasználók számára tervezték. De vannak olyan egéreszközök, amelye...