Menü
Ingyenes
becsekkolás
a fő  /  Programok / Rendszeres Unix kifejezések. Rendszeres kifejezések (Regex) a Linuxban

Rendszeres Unix kifejezések. Rendszeres kifejezések (Regex) a Linuxban

Eredeti: Linux alapok
Írta: Paul Cobbaut
Publikáció dátuma: 2014. október 16
Fordítás: a.panin
Fordítás dátuma: december 17, 2014

19. fejezet Rendszeres kifejezések

A rendszeres kifejezések mechanizmusa nagyon erős Linux eszköz. Rendszeres kifejezések Használható, ha különböző programok, például bash, vi, átnevezése, grep, sed és mások.

Ez a fejezet alapvető információkat tartalmaz a rendszeres kifejezésekről.

Rendszeres expressziós szintaxis változat

A rendszeres kifejezések három különböző verziója létezik: alapvető rendszeres kifejezések (rendszeres kifejezések alapszintaxja) ERE: kiterjesztett rendszeres kifejezések (speciális kifejezések speciális szintaxis) PCRE: PERL rendszeres kifejezések

Az alkalmazott szerszámtól függően egy vagy több előírást használhatunk.

Például a GREX eszköz egy paraméter--et támogat, amely lehetővé teszi a kiterjesztett rendszeres kifejezések (ERE) szintaxis (ERE) használatát rendszeres kifejezés elemzése során, amely időpontban a -G paraméter lehetővé teszi az alapszintaxis használatát Rendszeres kifejezések (BRE) és a -p paraméter - a PERL programozási nyelv (PCRE) rendszeres kifejezéseinek szintaxisa.

Figyelembe véve azt a tényt, hogy a GREX eszköz támogatja a -f paramétert is, amely lehetővé teszi, hogy a rendszeres kifejezést feldolgozás nélkül olvassa el.

A SED eszköz támogatja a paramétereket is, hogy kiválassza a rendszeres kifejezések szintaxisát.

Mindig olvassa el az alkalmazott eszközök irányelveit!

Utility Grep.

A sablonhoz illő karakterláncok következtetése

A GREP segédprogram egy népszerű Linux eszköz, amelynek célja, hogy olyan sorokat keressen, amelyek megfelelnek egy speciális sablonnak. Az alábbiakban példák a legegyszerűbb rendszeres kifejezésekre, amelyekkel együtt használhatók.

Ez a példákban használt vizsgálati fájl tartalma. Ez a fájl három vonalat tartalmaz (vagy az új vonal három szimbóluma). [E-mail védett]: ~ $ Cat nevek Tania Laura Valentina

Egy külön karakter keresésénél csak azokat a sorokat jelenítenek meg, amelyek egy meghatározott szimbólumot tartalmaznak. [E-mail védett]: ~ $ Grep u nevek laura [E-mail védett]: ~ $ Grep e nevek valentina [E-mail védett]: ~ $ Grep i nevek Tania Valentina

A példában használt sablonhoz való összehasonlítás nyilvánvaló; Abban az esetben, ha a megadott szimbólum megtalálható a karakterláncban, a Grep segédprogram megjeleníti ezt a karakterláncot.

Szimbólumok kombinálása

A karakterek kombinációinak kereséséhez a rendszeres kifejezés szimbólumait ugyanúgy kell kombinálni.

Ez a példa bemutatja a GREP segédprogram működésének elvét, amely szerint az IA rendszeres kifejezés megfelel a Tan Ia-karakterláncnak, de nem a Va Lent I NA, és a rendszeres kifejezés a sorban, de nem Ta ni a. [E-mail védett]: ~ $ Grep nevek Tania Laura Valentina [E-mail védett]: ~ $ Grep ia nevek tania [E-mail védett]: ~ $ Grep a Valentina nevében [E-mail védett]:~$

Egy vagy egy másik szimbólum

Mind a PCRE szintaxisban, mind az ERE szintaxisban egy szoftvercsatorna létrehozásának szimbóluma, amely ebben az esetben logikus műveletet nyújt be "vagy". Ebben a példában keresünk a húrok grep segédprogramjaival, amelyekben az I karakter találkozik, vagy egy szimbólum a. [E-mail védett]: ~ $ Macska lista Tania Laura [E-mail védett]: ~ $ Grep -e "i | a" lista tania laura

Felhívjuk figyelmét, hogy az általunk használt paraméter -E Grep közművek az erőltetett értelmezését a reguláris kifejezés, mint egy kifejezés használatával rendszeres szintaxis a reguláris kifejezések (ERE).

Meg kell vizsgálnunk egy szimbólumot egy szoftvercsatorna létrehozására rendszeres kifejezésben, a rendszeres kifejezések (BRE) alapszintaxis segítségével, amelynek hasonló értelmezése e karakter logikai műveletként "vagy". [E-mail védett]: ~ $ Grep -g "i | A" lista [E-mail védett]: ~ $ Grep -g "I \\ | A" lista tania laura

Egy vagy több egybeesés

A * szimbólum megfelel az előző szimbólum nulla, egy vagy több bejegyzésének, valamint a + - későbbi karakter szimbólumnak. [E-mail védett]: ~ $ Macska lista2 ll lol loool [E-mail védett]: ~ $ Grep -e "o *" lista2 ll lol lool loool [E-mail védett]: ~ $ Grep -e "o +" lista2 lol loool [E-mail védett]:~$

Véletlen egybeesés a karakterlánc végén

A következő példákban ezt a fájlt fogjuk használni: [E-mail védett]: ~ $ Cat nevek Tania Laura Valentina Fleur Floor

Két példa szerint a következő módszer a dollár szimbólum használatára, hogy a vonal végén egybeeső egybeesés. [E-mail védett]: ~ $ Grep A $ nevek Tania Laura Valentina [E-mail védett]: ~ $ Grep r $ megnevezés Fleur padló

Véletlen egybeesés a vonal elején

A Beszúrás szimbóluma (^) lehetővé teszi, hogy az elején (vagy az első karakterekből) egybeesését keressük.

Ezekben a példákban a fentiekben figyelembe vett fájlt használják. [E-mail védett]: ~ $ Grep ^ val nevek valentina [E-mail védett]: ~ $ Grep ^ F megnevezi a fleur padlót

A rendszeres kifejezésekben használt dollár és betétek szimbólumait horgonyok (horgonyok) nevezik.

A szavak elválasztása

A Wanted szavak árnyékolása A GAP szimbólumok segítségével nem jó megoldás (mivel más karakterek is használhatók szó elválasztóként). Az alábbi példában azt a módszert mutatja, hogy a karakterek szekvenciáját \\ B-ot használjunk egy adott szóval rendelkező sorok kereséséhez, nem karaktersorozatok: [E-mail védett]: ~ $ Grep "\\ bover b" szöveg A tél vége. El tudsz menni oda? [E-mail védett]:~$

Kérjük, vegye figyelembe, hogy a Grep segédprogram támogatja a keresést kereső -w paraméter is. [E-mail védett]: ~ $ Cat szöveg A kormány irányítása. A tél vége. El tudsz menni oda? [E-mail védett]: ~ $ GREP -W -W a szöveg felett, a tél vége. El tudsz menni oda? [E-mail védett]:~$

Beállítások Utilities Grep.

Néha kiderül, hogy könnyebben kombinálható egy egyszerű rendszeres kifejezést a GREP segédprogram paramétereivel, nem pedig komplex rendszeres kifejezést. Ezeket a paramétereket korábban tárgyalták: GREP -I GREP -V GREP -W GREP -A5 GREP -B5 GREP -C5

Megakadályozza a rendszeres kifejezés nyilvánosságra hozatalát a parancshéj segítségével

A dollár szimbólum mind a rendszeres kifejezés, mind a parancshéj speciális szimbóluma (emlékezzen a parancshéjváltozókra és a beágyazott parancshéjra). Ennek alapján javasoljuk, hogy bármilyen körülmények között rendszeres kifejezéseket vetessen, mivel a rendszeres kifejezés szűrése lehetővé teszi, hogy megakadályozza a kifejezést a parancssorban. [E-mail védett]: ~ $ Grep "r $" nevek Fleur Padló átnevezése

Utility átnevezése.

Az átnevezés hasznossága

A Debain Linux disztribúció, a / usr / bin / átnevezés út egy link a / usr / bin / prename forgatókönyv telepíthető a PERL csomagot. [E-mail védett] ~ $ Dpkg -s $ (Readlink -f $ (átnevezése) Perl: / usr / bin / preneame

A Red Hat eloszláson alapuló disztribúciókban nem hoz létre hasonló szimbolikus hivatkozást a leírt parancsfájl megadásához (természetesen, az esetek kivételével, amikor a szkript kézi szkripthez képest szimbolikus linket hoz létre), így ez a rész nem írja le Az átnevezés segédprogram az elosztó piros kalapból.

Az interneten történő átnevezéssel kapcsolatos megbeszélések során általában zavart következik be, mivel a Debian eloszlásban tökéletesen működő döntések (valamint az Ubuntu, a Xubuntu, a menta, ...) nem használhatók a piros kalap eloszlásában (mint valamint Centosz, Fedora, ...).

Perl csomag

Az átnevező parancs valójában egy szkript formájában valósul meg, amely rendszeres perl programozási nyelveket használ. A szkript használatának teljes kézikönyvével olvasható a PERLDOC Perlrequick parancs beírása után (Perdoc csomag telepítése után). [E-mail védett]: ~ #titudage Install Perl-Doc A következő új csomagok kerülnek telepítésre: PERL-DOC 0 csomag frissítve, 1 telepített új, 0 csomagot meg kell törölni, és 0 csomagot nem frissítenek. 8.170 kb archívumot kell kapni. A kicsomagolás után 13,2 MB lesz elfoglalva. Get: 1 http://mirrordirector.raspbian.org/rarkian/ whehezy / Main Perl-do ... 8,170 KB 19c (412 kb / s) Válasszon ki egy korábban kiválasztott PERL-DOC csomagot. (Az adatbázis olvasása ... on ebben a pillanatban 67121 fájl és könyvtár van telepítve.) Perl-doc (... -tól / perl-doc_5.14.2-21 + rpi2_all.deb) ... hozzátéve: „DiveSion a / usr / bin / perldoc a / usr / bin / perldoc. Perl-Doc "feldolgozott triggerek az MAN-DB-hez ... A Perl-Doc csomag konfigurálva van (5.14.2-21 + RPI2) ... [E-mail védett]: ~ # Perdoc Perlrequick

Jól ismert szintaxis

Leggyakrabban az átnevezõ segédprogramot olyan fájlok keresésére használják, amelyek megfelelnek egy specifikus sablonnak megfelelő karakterlánc formájában, és cserélje ki ezt a karakterláncot egy másik vonalra.

Jellemzően ezt a műveletet egy rendszeres S / STRING / Other / másik vonal /, amint azt a példa mutatja: [E-mail védett] ~ $ Ls abc allfiles.txt bllfiles.txt karcolás tenisz2.txt abc.conf backup cllfiles.txt temp.txt tenis.txt [E-mail védett] ~ $ Rename "s / txt / szöveg /" * [E-mail védett] ~ $ Ls abc allfiles.Text bllfiles.Text scratch tenisz2.Text abc.conf backup cllfiles.Text temp.text tenisz.text

Az alábbi példa egy másik példa, amely az átnevezéses segédprogram jól ismert szintaxisát használja, hogy ismételten módosítsa az azonos fájlok kiterjesztését: [E-mail védett] ~ $ Ls abc allfiles.Text bllfiles.Text scratch tenisz2.Text abc.conf backup cllfiles.Text temp.text tenisz.text [E-mail védett] ~ $ Rename "s / text / txt /" * .text [E-mail védett] ~ $ Ls abc allfiles.txt bllfiles.txt karcolás tenisz2.txt abc.conf backup cllfiles.txt temp.txt tenis.txt [E-mail védett] ~ $

Ez a két példa működik arra, hogy az általunk használt karakterláncok kizárólag fájlbővítményekben találhatók. Ne felejtsük el, hogy a fájlbővítmények nem számítanak, amikor a Bash Command Shell-szel működik.

A következő példa bemutatja azt a problémát, amellyel találkozhat a szintaxis használatakor. [E-mail védett] ~ $ Touch atxt.txt [E-mail védett] ~ $ Rename "s / txt / probléma /" atxt.txt [E-mail védett] ~ $ Ls abc allfiles.txt backup cllfiles.txt temp.txt tenis.txt abc.conf aprroclem.txt bllfiles.txt scratch tenis2.txt [E-mail védett] ~ $

A vizsgált parancs végrehajtásakor kivételesen a kívánt karakterlánc első bejegyzésének cseréje történik.

Globális csere

Az előző példában használt szintaxis a következőképpen írható le: s / rendszeres kifejezés / karakterlánc cseréhez /. Ez a leírás egyszerű és nyilvánvaló, mivel csak rendszeres kifejezést kell elhelyeznie a két első slash között, és egy sor az utolsó két szálak között.

A következő példában ez a szintaxis kissé bővül a módosító hozzáadása miatt. [E-mail védett] ~ $ Rename -n "s / txt / txt / g" atxt.txt atxt.txt néven ATXT.TXT [E-mail védett] ~ $

Most az általunk használt szintaxist S / Regular Expression / karakterláncként lehet leírni a csere / g-hez, ahol az S módosító csere-művelet (kapcsoló), és a G módosító jelentést tesz a végrehajtás szükségességére globális csere (Globális).

Ne feledje, hogy ebben a példában a -N paramétert használták az elvégzett műveletről szóló információk megjelenítéséhez (ahelyett, hogy maga a művelet végrehajtása, amely a fájl közvetlen felújítását tartalmazza).

Csere regisztráció nélkül

Egy másik módosító, amely hasznos lehet, egy módosító I. Az alábbi példa azt mutatja, hogy a karakterlánc egy másik vonalra való cseréjét a nyilvántartás regisztrálása nélkül. [E-mail védett]: ~ / Fájlok $ ls file1.Text file2.Text file3.txt [E-mail védett]: ~ / Files $ Rename "s / .text / .txt / i" * * [E-mail védett]: ~ / Fájlok $ ls file1.txt file2.txt file3.txt [E-mail védett]: ~ / Fájlok $

A kiterjesztések megváltoztatása

Csapatfelület linux húrok Az operációs rendszerben alkalmazható MS-DOS-hoz hasonló fájlkiterjesztéseknek nincs értelme, de sok felhasználó és grafikus felületen használható.

Ez a szakasz példát mutat az átnevezés segédprogram használatára a kizárólag fájlbővítmények megváltoztatásához. A példa a dollár szimbólumot használja, jelezve, hogy a csere referenciapontja a fájlnév vége. [E-mail védett] ~ $ Ls * .txt allfiles.txt bllfiles.txt cllfiles.txt igazán.txt.txt temp.txt tenis.txt [E-mail védett] ~ $ Rename "s / .txt $ /. Txt /" * .txt [E-mail védett] ~ $ Ls * .txt allfiles.txt bllfiles.txt cllfiles.txt igazán.txt.txt temp.txt tenis.txt [E-mail védett] ~ $

Ne feledje, hogy a rendszeres kifejezésen belüli dollár szimbólum jelzi a vonal végét. A dollár szimbólum nélkül a parancs végrehajtását a tényleg.txt.txt fájl nevének feldolgozásakor kell elvégezni.

Sed segédprogram

Adatfolyam-szerkesztő

Az adatfolyam-szerkesztő (Stream szerkesztő) vagy a rövidség esetén a SED segédprogram rendszeres kifejezéseket használ az adatfolyam módosításához.

Ebben a példában a SED segédprogramot a karakterlánc cseréjére használják. Echo Hétfő | Sed "s / monon / sec /" kedd

A Slash cserélhető más karakterekkel, amelyek bizonyos esetekben kényelmesebbek és javították a csapatolvashatóságot. Echo Hétfő | SED "S: Hétfő: Másodszor:" Kedd Echo Hétfő | SED "S_- Region_vtor_" kedd Echo Hétfő | SED "S | Hétfő | Rat |" kedd

Interaktív szerkesztő

Annak ellenére, hogy a SED segédprogram az adatfolyamok kezelésére szolgál, az interaktív fájlfeldolgozáshoz is használható. [E-mail védett]: ~ / Files $ Echo Hétfő\u003e Ma [E-mail védett]: ~ / Fájlok $ macska ma hétfőn [E-mail védett]: ~ / Fájlok $ sed -i "s / hétfő / dev /" ma [E-mail védett]: ~ / Fájlok $ macska ma kedden

Az Ampersand Symbol használható a kívánt (és talált) karakterláncra.

Ebben a példában az Ampersand a talált vonalak számának megduplázására szolgál. Echo Hétfő | SED "S / MONDA / && /" hétfő echo hétfőn SED "S / NIK / && /" hétfő

Kerek zárójeleket használnak a rendszeres kifejezés csoportjainak csoportosításához, amely később telepíthető a linkek.

Tekintsük a következő példát: [E-mail védett]: ~ $ Visszhang vasárnap | Sed "s _ \\ (Sun \\) _ \\ 1NY_" napos nap [E-mail védett]: ~ $ Visszhang vasárnap | Sed "s _ \\ (Sun \\) _ \\ 1_" napos vasárnap

Pont a szimbólum jelölésére

A rendszeres kifejezésben egy egyszerű pont szimbólum jelölhet bármilyen karaktert. [E-mail védett]: ~ $ ECHO 2014-04-01 | sed "s /....-..-../ yyyy-mm-dd /" yyyy-mm-dd [E-mail védett]: ~ $ Echo ABCD-EF-GH | sed "s /....-..-../ yyyy-mm-dd /" yyyy-mm-dd

Abban az esetben, ha egynél több kerek zárójel van, az egyesek hivatkozása egymást követő numerikus értékek alkalmazásával végezhető el. [E-mail védett]: ~ $ ECHO 2014-04-01 | Sed "s / \\ (...) - \\ (.. \\) - \\ (.. \\) - \\ (.. \\) / \\ 1+ \\ 2+ \\ 3 /" 2014 + 04 + 01 [E-mail védett]: ~ $ ECHO 2014-04-01 | Sed "s / \\ (.... \\) - \\ (.. \\) - \\ (..) / \\ 3: \\ 2: \\ 1 /" 01: 04: 2014

Ezt a funkciót csoportosításnak nevezik.

Tér

A szimbólumszekvencia használható, hogy olyan szimbólumként hivatkozzon, mint egy tér vagy lap szimbólum.

Ez a példa globális szekvencia szekvenciákat biztosít a GAP szimbólumok (s), amelyek helyébe 1 űrhajó lép. [E-mail védett]: ~ $ echo -e "ma \\ cím \\ td" ma egy meleg nap [E-mail védett]: ~ $ echo -e "ma \\ Trade \\ TDN" | sed "s_ s_ _g" ma egy meleg nap

Opcionális bejegyzések

A kérdőjel szimbóluma azt jelzi, hogy az előző szimbólum opcionális.

Az alábbi példában három karakterből álló sorozatot keresnek, és az O harmadik karakter opcionális. [E-mail védett]: ~ $ Macska lista2 ll lol loool [E-mail védett]: ~ $ Grep -e "ooo?" List2 Lool Loool. [E-mail védett]: ~ $ Cat List2 | Sed "s / ooo) / a /" ll lal lal

Pontosan n ismétlések

Megadhatja az előző szimbólum ismétlésének pontos számát.

Ez a példa pontosan három szimbólummal keresi a sorokat O. [E-mail védett]: ~ $ Macska lista2 ll lol loool [E-mail védett]: ~ $ Grep -e "o (3)" List2 Loool [E-mail védett]: ~ $ Cat List2 | SED "S / O \\ (3 \\) / A /" LL LOL LOOL LAL [E-mail védett]:~$

N-tól m ismétlésre

És ebben a példában egyértelműen azt jelzik, hogy a szimbólumot a minimumtól (2) -tól a maximális (3) számra kell ismételni. [E-mail védett]: ~ $ Macska lista2 ll lol loool [E-mail védett]: ~ $ Grep -e "o (2.3)" List2 Lool Loool [E-mail védett]: ~ $ Grep "o \\ (2.3 \\)" List2 Lool Loool [E-mail védett]: ~ $ Cat List2 | SED "S / O \\ (2.3 \\) / A /" LL LOL LAL LAL [E-mail védett]:~$

Bash Command Shell Történelem

A Bash Command Shell rendszeres kifejezést is értelmezhet.

Ez a példa egy manipulációs technikát mutat be egy felkiáltójel, a Bash Command Shell történelem keresési maszk részeként. [E-mail védett]: ~ $ Mkdir Hist [E-mail védett]: ~ $ CD Hist / [E-mail védett]: ~ / Hist $ touch file1 fájl2 fájl3 [E-mail védett]: ~ / Hist $ ls -l fájl1 -rw-r - r-- 1 Paul Paul 0 április 15 22:07 File1 [E-mail védett]: ~ / Hist $! L ls -l file1 -rw-r - r-- 1 Paul Paul 0 április 15 22:07 File1 [E-mail védett]: ~ / Hist $! L: S / 1/3 LS -L File3 -rw-r - r-- 1 Paul Paul 0 április 15 22:07 File3 [E-mail védett]: ~ / Hist $

Ez a technika a számok használata esetén is működik, amikor elolvassa a Bash Command Shell parancs történetét. [E-mail védett]: ~ / Hist $ Történelem 6 2089 Mkdir Hist 2090 CD Hist / 2091 Touch File1 File2 File2 File3 2092 LS -L File1 2093 LS -L File3 2094 Történelem 6 [E-mail védett]: ~ / Hist $! 2092 LS -L File1 -rw-r - r- 1 Paul Paul 0 április 15 22:07 File1 [E-mail védett]: ~ / Hist $! 2092: s / 1/2 ls -l file2 -rw-r - r-- 1 Paul Paul 0 április 15 22:07 File2 [E-mail védett]: ~ / Hist $

Annak érdekében, hogy teljesen feldolgozzák a szövegeket a bash-szkriptekben Sed és Awk segítségével, egyszerűen szükség van a rendszeres kifejezések kezelésére. Ennek a hasznos eszköznek a végrehajtása szó szerint mindenhol megtalálható, és bár minden rendszeres kifejezést használnak, ugyanazon ötleteken alapulva, a velük együtt dolgoznak különböző környezetben. Itt beszélünk a rendszeres kifejezésekről, amelyek alkalmasak a forgatókönyvekben való használatra. parancs sor Linux.

Ezt az anyagot a rendszeres kifejezések bevezetésére tervezték, amelyet azoknak terveztek, akik nem tudják, hogy mi az. Ezért kezdje el a kezdetektől.

Mi a rendszeres kifejezések

Sokra, amikor először rendszeres kifejezéseket látnak, az ötlet azonnal felmerül, hogy nincs értelmetlen napközben. De ez természetesen messze van. Vessen egy pillantást, például ezen a rendszeres kifejezésen


Véleményünk szerint még egy abszolút kezdő is azonnal meg fogja érteni, hogyan működik, és miért van szükség :) Ha nem érti, csak olvassa el, és minden a helyére kerül.
A rendszeres kifejezés olyan sablon, amely olyan programokat használ, mint a sed vagy awk szűrőszűrő szövegek. A sablonokban, a hagyományos ASCII karakterek, amelyek magukat képviselik magukat, és az úgynevezett metasimlistákat, akik különleges szerepet játszanak például, lehetővé téve, hogy néhány karaktercsoportra utaljon.

Rendszeres kifejezések típusai

Rendszeres kifejezések végrehajtása különböző környezetekben, például olyan programozási nyelveken, mint a Java, Perl és Python, Linux eszközök, mint a SED, AWK és GEP, vannak bizonyos jellemzők. Ezek a funkciók az úgynevezett motorfeldolgozó motoroktól függenek, amelyek a sablonok értelmezésével foglalkoznak.
A Linuxnak két rendszeres kifejezésmotorja van:
  • A motor támogatja a POSIX alapvető rendszeres kifejezést (BRE) szabványt.
  • A POSIX támogató motor kiterjesztette a rendszeres kifejezést (ERE) szabványt.
A legtöbb Linux segédprogramnak legalább a szabványos POSIX BRE-nek felel meg, de egyes közművek (köztük - SED) csak a BRE szabvány bizonyos részhalmazát értik meg. Az ilyen korlátozás egyik oka az, hogy az ilyen segédprogramok a lehető leggyorsabban a szövegfeldolgozásban legyenek.

A POSIX ERE szabványt gyakran programozási nyelveken hajtják végre. Lehetővé teszi, hogy nagyszámú forrást használjon rendszeres kifejezések fejlesztésekor. Például speciális karakterek szekvenciák a gyakran használt mintákhoz, mint a keresés a szövegben. külön szavak vagy számjegyek. Az awk támogatja az ERE szabványt.

Számos módja van a rendszeres kifejezések fejlesztésére a programozó véleményétől és a motor jellemzői függvényében, amelyet az általuk hoztak létre. Nem könnyű írni univerzális rendszeres kifejezéseket, amelyek megérthetik a motort. Ezért a leggyakrabban használt rendszeres kifejezésekre összpontosítunk, és figyelembe vesszük a SED és az AWK végrehajtásának jellemzőit.

Rendszeres kifejezések POSIX BRE

Talán a legegyszerűbb BRE sablon rendszeres kifejezés, hogy pontos szimbólumsorozatot keressen a szövegben. Itt van a sed és awk string keresése:

$ Echo "Ez egy teszt" | Sed -n "/ teszt / p" $ echo "Ez egy teszt" | Awk "/ teszt / (nyomtatás $ 0)"

Szöveg keresése sablon segítségével SED


Szövegkeresés sablon által az awk

Megjegyezhető, hogy a megadott sablon keresése anélkül történik, hogy figyelembe vesszük a karakterlánc szövegének pontos helyét. Ezenkívül az események száma nem számít. Miután a rendszeres kifejezés megtalálja a megadott szöveget bárhol a karakterláncban, a karakterlánc megfelelőnek tekinthető és továbbadható további feldolgozásra.

Figyelembe kell venni a rendszeres kifejezésekkel való munkát, hogy érzékenyek a karakterek nyilvántartására:

$ Echo "Ez egy teszt" | Awk "/ teszt / (nyomtatás $ 0)" $ echo "Ez egy teszt" | Awk "/ teszt / (nyomtatás $ 0)"

A rendszeres kifejezések érzékenyek a regisztrációra

Az egybeesés első rendszeres kifejezése nem találta meg, mivel a "teszt" szó, a nagybetűvel kezdődően, nem fordul elő a szövegben. A második, a nagybetűk által írt szó kereséséhez konfigurálva megfelelő karakterláncot talált a patakban.

Rendszeres kifejezésekben nem csak betűk, hanem szóközök és számok is:

$ Echo "Ez egy teszt 2 ismét" | Awk "/ teszt 2 / (nyomtatás $ 0)"

Keressen egy szóközt tartalmazó szöveget és számokat tartalmazó töredéket

A szóközöket a rendszeres kifejezések motorja rendes karakterekként érzékelik.

Speciális szimbólumok

Ha különböző szimbólumokat használnak rendszeres kifejezésekben, bizonyos funkciókat kell figyelembe venni. Tehát vannak olyan speciális szimbólumok, vagy metakarakterek, amelyek a sablonban speciális megközelítést igényelnek. Itt vannak:

.*^${}\+?|()
Ha az egyikükre szükség van a sablonban, akkor meg kell árnyékolni egy fordított fonat (fordított slash) - \\.

Például, ha a szöveget meg kell találnia egy dollár jelet, akkor a szűrő szimbólum után be kell kapcsolni a sablonban. Mondja, van egy myfile fájl ilyen szöveggel:

10 dollár van a zsebemben
A dollárjel egy ilyen sablon segítségével detektálható:

$ Awk "/ $ / (nyomtatás $ 0)" myfile

Használjon speciális szimbólum sablonban

Ezenkívül a fordított süllyedő vonal is speciális szimbólum, így ha a sablonban kell használni, akkor is árnyékolandó. Úgy tűnik, két slash, egymásba megy:

$ Echo "egy különleges karakter" | Awk "/ \\\\ / (nyomtatás $ 0)"

Árnyékolás Reverse Slash

Bár a Direct Slash nem szerepel a fenti speciális karakterek listájában, a SED-hez vagy az awk számára írt rendszeres kifejezésben való használatra irányuló kísérlet hibát eredményez:

$ Echo "3/2" | Awk "/// Nyomtatás $ 0)"

A közvetlen slash használatának helytelen használata a sablonban

Szükség esetén is meg kell árnyékolni:

$ Echo "3/2" | Awk "/ // (nyomtatás $ 0)"

Direct Slash árnyékolása

Horgonyszimbólumok

Két speciális karakter van a sablon elejére vagy a szöveges karakterlánc végére történő megkötéséhez. A "borító" szimbólum - ^ lehetővé teszi, hogy leírja a szöveges karakterláncok elején lévő karakterek szekvenciáit. Ha a kívánt minta a karakterlánc másik helyén van, a rendszeres kifejezés nem válaszol rá. Úgy tűnik, ez a szimbólum így van:

$ Echo "Üdvözöljük a LikeGeeks weboldalon" | Awk "/ ^ LikeGeeks / (nyomtatás $ 0)" $ Echo "LikeGeeks weboldal" | Awk "/ ^ LikeGeeks / (nyomtatás $ 0)"

Sablonkeresés a vonal elején

A ^ szimbólum úgy van kialakítva, hogy egy sablont keressen a vonal elején, míg a karakterek nyilvántartását is figyelembe veszik. Lássuk, hogy ez hogyan befolyásolja a feldolgozást szöveges fájl:

$ Awk "/ ^ Ez / (nyomtatás $ 0)" myfile


Sablonkeresés a sorban lévő vonal elején a fájlból

Ha SED-t használ, ha a fedelet bárhová helyezi a sablonba, akkor bármely más hagyományos szimbólumként fogja észlelni:

$ Echo "Ez ^ egy teszt" | Sed -n "/ s ^ / p"

A fedél, amely nem a sablon elején van

Az AWK-ban ugyanazt a sablont használja, ezt a karaktert árnyékolni kell:

$ Echo "Ez ^ egy teszt" | Awk "/ s \\ ^ / (nyomtatás $ 0)"

A fedél, amely nem az awk sablon elején van

A szövegfragmensek keresésével a vonal elején rájöttünk. Mi van, ha meg kell találnod valamit a sor végén található?

Ez segít nekünk egy dollár jel - $, ami egy horgonylánc végső szimbólum:

$ Echo "Ez egy teszt" | Awk "/ teszt $ / (nyomtatás $ 0)"

Szövegkeresés a karakterlánc végén

Ugyanebben a sablonban mindkét horgonyszimbólumot használhatja. A MyFile fájl feldolgozását végzünk, amelynek tartalmát az alábbi ábrán mutatjuk be, ilyen rendszeres kifejezéssel:

$ Awk "/ ^ Ez egy teszt $ / (nyomtatás $ 0)" myfile


Sablon, amelyben speciális és végső szimbólumokat használnak

Amint látható, a sablont csak egy teljesen megfelelő karakterláncon reagálták meghatározott sorrend karakterek és helyük.

Íme, hogyan, horgonyszimbólumokkal, szűrő üres vonalakkal:

$ Awk "! / ^ $ / (Nyomtatás $ 0)" myfile
Ebben a sablonban a tagadás szimbólumát használta, felkiáltójel -! . Az ilyen sablon használatával keresünk olyan sorok, amelyek nem tartalmaznak semmit a vonal kezdete és vége között, és felkiáltójel Csak azok a sorok jelennek meg, amelyek nem felelnek meg a sablonnak.

"Pont"

A pontot az egyetlen szimbólum keresésére használják, kivéve a sorfordítási szimbólumot. Adunk ilyen rendszeres kifejezést myfile fájlt, amelynek tartalmát az alábbiak:

$ Awk "/.st/(print $ 0)" myfile


Rendszeres kifejezések használata

Amint a megjelenített adatok szerint látható, a sablon csak az első két sornak felel meg a fájlból, mivel tartalmaznak egy "ST" karaktereket, amelyeket egy másik szimbólum úgy tesz, míg a megfelelő szekvencia harmadik sora nem tartalmaz , és a negyedikben van, de a vonal kezdetén van.

A szimbólumok osztályai

A pont megfelel egyetlen szimbólumnak, de mi van, ha rugalmasabban kell korlátozni a kívánt karakterek sorát? Ilyen helyzetben használhatja a karakterek osztályát.

Ennek a megközelítésnek köszönhetően a megadott készlet bármely karakterének keresését szervezheti. A négyzet alakú zárójeleket a karakterek karakterosztályának leírására használják -:

$ Awk "/ Th / (nyomtatás $ 0)" myfile


A karakterek osztályának leírása rendszeres feltételekkel

Itt keresjük a "TH" karakterek sorrendjét, amelyek előtt van egy "O" szimbólum vagy az "I" szimbólum.

Az osztályok nagyon barátságosak, ha a tőke és a kisbetűk mind a tőke és a kisbetűk mind a tőke, mind a kisbetűk keresése elindulnak:

$ Echo "Ez egy teszt" | Awk "/ ő egy teszt / (nyomtatás $ 0)" $ echo "Ez egy teszt" | Awk "/ az ő egy teszt / (nyomtatás $ 0)"

Olyan szavak keresése, amelyek kis- vagy nagybetűvel kezdődhetnek

A karakterosztályok nem korlátozódnak a betűkre. Itt más karaktereket is használhat. Lehetetlen előre mondani, hogy milyen helyzeti osztályokra van szükség - mindez a megoldott feladattól függ.

A szimbólumok osztályai megtagadása

A karakterosztályok felhasználhatók a fentiekben ismertetett feladat megoldására is. Nevezetesen, ahelyett, hogy megtalálná az osztályteremben szereplő karaktereket, megszervezheti a keresést minden, ami nem szerepel az osztályban. Annak érdekében, hogy a rendszeres kifejezés ilyen viselkedését elérjük, mielőtt az osztály karakterek listáját meg kell helyezni ^. Ez így néz ki:

$ Awk "/ [^ oi] th / (nyomtatás $ 0)" myfile


Az osztályba nem tartalmazott szimbólumok keresése

Ebben az esetben a "TH" karakterek szekvenciái megtalálhatók, mielőtt nincs "O", sem "I".

Szimbólum sávok

A szimbolikus osztályokban leírhatja a karakterek tartományait:

$ Awk "/ St / (nyomtatás $ 0)" myfile


A szimbólumosztály leírása a szimbolikus osztályban

Ebben a példában a reguláris kifejezés válaszol a sorrend a „ST” szimbólum, ami előtt van olyan szimbólum található, alfabetikus sorrendben, az egyes karakterek között „E” és „P”.

A tartományok a számokból hozhatók létre:

$ Echo "123" | Awk "//" $ echo "12a" | Awk "//"

Rendszeres kifejezés, hogy három számot keressen

A szimbólumosztály több tartományt tartalmazhat:

$ Awk "/ St / (nyomtatás $ 0)" myfile


Szimbólumosztály, amely több tartományból áll

Ez a rendszeres kifejezés megtalálja az összes "ST" szekvenciát, amelyek előtt vannak szimbólumok az A-F és M-Z zenekarokból.

Speciális osztályok szimbólumok

A BRE speciális karakterosztályokkal rendelkezik, amelyek rendszeres kifejezések írásakor használhatók:
  • [[: Alpha:]] - megfelel a felső vagy alsó regiszterben rögzített betűrendes szimbólumnak.
  • [[: ALNUM:]] - megfelel az alfanumerikus szimbólumnak, nevezetesen a 0-9, A-Z, A-Z tartományban lévő szimbólumoknak.
  • [[: Blank:]] - megfelel a lap megszakadásának és lapjának.
  • [[: Digit:]] - Minden digitális szimbólum 0 és 9 között.
  • [[: Felső:]] - ábécé karakterek a nagybetűkben - A-Z.
  • [[: Alsó:]] - ábécé karakterek a kisbetűs - A-Z.
  • [[: Nyomtatás:]] - megfelel a nyomtatott szimbólumnak.
  • [[: Punct:]] - megfelel az írásjeleknek.
  • [[: Space:]] - Blind karakterek, különösen - Space, Tab Sign, Symbols NL, FF, VT, Kr.
Használjon speciális osztályokat a sablonokban, mint ez:

$ Echo "ABC" | Awk "/ [[: Alpha:]] / (PRINT $ 0)" $ ECHO "ABC" | Awk "/ [[: Digit:]] / (PRINT $ 0)" $ ECHO "ABC123" | Awk "/ [[: Digit:]] / (nyomtatás $ 0)"


Szimbólumok különleges osztályai rendszeres kifejezésekben

"Csillag" szimbólum

Ha a szimbólum után a sablonban tegye a csillagot, ez azt jelenti, hogy a rendszeres kifejezés akkor fog működni, ha a szimbólum a sorban megjelenik a sorban, többször is - beleértve a helyzetet, amikor a vonal hiányzik.

$ Echo "teszt" | Awk "/ tes * t / (nyomtatás $ 0)" $ echo "tessst" | Awk "/ tes * t / (nyomtatás $ 0)"


Szimbólum használata * Rendszeres kifejezésekben

Ezt a sablonszimbólumot általában olyan szavakkal dolgozhatunk, amelyekben a hibák, vagy a helyesírás különböző lehetőségei vannak:

$ Echo "Szeretem a zöld színt" | Awk "/ colou * r / (nyomtatás $ 0)" $ echo "Szeretem a zöld színű" | Awk "/ colou * r / (nyomtatás $ 0)"

Keresés különböző írási lehetőségeket

Ebben a példában ugyanaz a rendszeres kifejezés reagál a "szín" szóra és a "szín" szóra. Annyira köszönhető, hogy az "u" szimbóluma, amely után a csillagok állnak, akár távollétben sem lehetnek, akár többször is bekövetkezhetnek.

Egy másik hasznos lehetőség, amely a csillagok szimbóluma jellemzőiből származik, egy ponttal kombinálva. Az ilyen kombináció lehetővé teszi a rendszeres kifejezést, hogy válaszoljon bármely karakterre:

$ Awk "/this.Test/(print $ 0)" myfile


Sablon, amely bármilyen karakterre reagál

Ebben az esetben, függetlenül attól, hogy hány karakter van a "ez" és a "teszt" szavak között.

A csillagok szimbólumosztályokkal használhatók:

$ Echo "St" | Awk "/ s * t / (nyomtatás $ 0)" $ echo "sat" | Awk "/ s * t / (nyomtatás $ 0)" $ Echo "Set" | Awk "/ s * t / (nyomtatás $ 0)"


A csillagok segítségével szimbólumosztályokkal

Mindhárom példában a rendszeres kifejezés bekövetkezik, mivel a csillagok osztályát követő csillagok azt jelenti, hogy ha az "A" vagy az "E" karakterek száma megtalálható, és ha nem találhatók, akkor a karakterlánc megfelel a megadott sablonnak.

Rendszeres POSIX ERE kifejezések

Sablonok pOSIX szabvány Ha néhány Linux segédprogramot támogathat, további karaktereket tartalmazhat. Amint azt már említettük, az AWK támogatja ezt a szabványt, de a sed nem.

Itt megnézzük a leggyakrabban használt szimbólumokat, amelyek hasznosak lesznek Ön számára, amikor saját rendszeres kifejezéseket hoznak létre.

▍Shisant jel

A kérdőjel azt jelzi, hogy az előző szimbólum egyszer találkozhat a szövegben, vagy egyáltalán nem találkozhat. Ez a szimbólum az ismétlések egyik metasimvolja. Íme néhány példa:

$ Echo "Tet" | Awk "/ tes? T / (nyomtatás $ 0)" $ echo "teszt" | Awk "/ tes? T / (nyomtatás $ 0)" $ echo "tesst" | Awk "/ tes? T / (nyomtatás $ 0)"


Kérdőjel a rendszeres kifejezésekben

Amint látható, a harmadik esetben az "S" betű kétszer találkozik, így a "TESS" szó nem válaszol a rendszeres kifejezésre.

A kérdőjel szimbólumosztályokkal használható:

$ Echo "TST" | Awk "/ t? St / (nyomtatás $ 0)" $ echo "teszt" | Awk "/ t? St / (nyomtatás $ 0)" $ echo "tast" | Awk "/ t? St / (nyomtatás $ 0)" $ echo "taest" | Awk "/ t? St / (nyomtatás $ 0)" $ echo "teest" | Awk "/ t? St / (nyomtatás $ 0)"


Kérdőjel és szimbólumosztályok

Ha egy sorban nincsenek karakterek, vagy az egyikük egyszer bekövetkezik, akkor a rendszeres kifejezés bekapcsolódik, de a szónak két karakterből áll, és a rendszer már nem találja meg a szöveg megfelelő szövegét.

▍simol "Plus"

A sablon plusz szimbóluma azt jelzi, hogy a rendszeres kifejezés kimutatja a kívánt, ha az előző szimbólum egy vagy több alkalommal találkozik a szövegben. Ugyanakkor nincs ilyen kialakítás a szimbólum hiányában:

$ Echo "teszt" | Awk "/ te + st / (nyomtatás $ 0)" $ echo "teest" | Awk "/ te + st / (nyomtatás $ 0)" $ echo "tsst" | Awk "/ te + st / (nyomtatás $ 0)"


A "plusz" szimbóluma a rendszeres kifejezésekben

Ebben a példában, ha nincs "E" szimbólum a szóban, a rendszeres kifejezések motorja nem találja a sablont a szöveges illesztési szövegben. A "plusz" munkák szimbóluma és a szimbólumok osztályai - ez hasonló a matricához és a kérdőjelhez:

$ Echo "TST" | Awk "/ t + st / (nyomtatás $ 0)" $ echo "teszt" | Awk "/ t + st / (nyomtatás $ 0)" $ Echo "Heast" | Awk "/ t + st / (nyomtatás $ 0)" $ Echo "Teast" | Awk "/ t + st / (nyomtatás $ 0)"


Plusz jel és szimbólumosztályok

Ebben az esetben, ha bármilyen karakter van az osztályból a sorban, a szöveget a megfelelő minta érzékeli.

▍ FIGURE konzolok

Az ERE sablonokban használható számjegyzék hasonlóak a fent tárgyalt szimbólumokhoz, de lehetővé teszik, hogy korábban pontosabban állítsa be a szimbólum szükséges számát. Meghatározhatja a korlátozás két formátumban:
  • n olyan szám, amely meghatározza a kívánt bejegyzések pontos számát
  • n, M - két szám, amelyek a következőképpen értelmezhetők: "Legalább N-szer, de nem több, mint M."
Íme példák az első lehetőségre:

$ Echo "TST" | Awk "/ te (1) St / (nyomtatás $ 0)" $ echo "teszt" | Awk "/ te (1) st / (nyomtatás $ 0)"

Ábrázolt zárójelek sablonokban, keressen pontos számú eseményeket

Az AWK régi verzióiban a parancssori kulcsfontosságú-intervallumot kellett használni annak érdekében, hogy a program rendszeres kifejezésekben ismerje fel az intervallumokat, de ezt az új verziókban nem kell megtenni.

$ Echo "TST" | Awk "/ te (1,2) st / (nyomtatás $ 0)" $ echo "teszt" | Awk "/ te (1,2) st / (nyomtatás $ 0)" $ echo "teest" | Awk "/ te (1,2) st / (nyomtatás $ 0)" $ echo "teeiest" | Awk "/ te (1,2) st / (nyomtatás $ 0)"


Macoba intervallum

Ebben a példában az "E" szimbólumnak 1 vagy 2-szeres karakterláncban kell megfelelnie, akkor a rendszeres kifejezés válaszol a szövegre.

A figurált zárójelek szimbólumosztályokkal használhatók. Itt már ismeri az Ön alapelveit:

$ Echo "TST" | Awk "/ t (1,2) st / (nyomtatás $ 0)" $ echo "teszt" | Awk "/ t (1,2) st / (nyomtatás $ 0)" $ echo "teest" | Awk "/ t (1,2) ST / (PRINT $ 0)" $ Echo "Teast" | Awk "/ t (1,2) st / (nyomtatás $ 0)"


Nagy zárójelek és szimbólumosztályok

A sablon válaszol a szövegre, ha megfelel az "A" szimbólummal vagy az "E" szimbólummal.

▍mimvivo logikai "vagy"

Szimbólum | - Függőleges tulajdonság, rendszeres kifejezésekben logikus "vagy". Az ilyen jel által elválasztott több fragmenst tartalmazó rendszeres kifejezés feldolgozása során a motor figyelembe veszi az elemzett szöveget, amely megfelel az eseménynek, hogy megfelel a töredékeknek. Itt van egy példa:

$ Echo "Ez egy teszt" | Awk "/ teszt | vizsga / (nyomtatás $ 0)" $ echo "Ez egy vizsga" | Awk "/ teszt | vizsga / (nyomtatás $ 0)" $ echo "Ez valami más" | Awk "/ teszt | vizsga / (nyomtatás $ 0)"


Logikus "vagy" rendszeres kifejezésekben

Ebben a példában rendszeres kifejezés van konfigurálva a "teszt" vagy a "vizsga" szavak szövegének keresésére. Kérjük, vegye figyelembe, hogy a sablonfragmensek és a megosztási szimbólum között Nincsenek hiányosságok.

A rendszeres kifejezések töredékeit kerek zárójelekkel lehet csoportosítani. Ha egy bizonyos karaktersorozatot csoportosítják, akkor a rendszer normál szimbólumként fogja érzékelni. Vagyis például az ismétlések metakarakterek alkalmazása lehetséges. Itt van, amit úgy néz ki:

$ Echo "Like" | Awk "/ Mint (Geeks)? / (PRINT $ 0)" $ Echo "LikeGeeks" | Awk "/ Like (Geeks)? / (Nyomtatás $ 0)"


Rendszeres kifejezések csoportosítása

Ezekben a példákban a "Geeks" szó kerek zárójelben van, miután a tervezés van egy kérdőjel. Emlékezzünk vissza, hogy a kérdőjel "0 vagy 1 ismétlést" jelent, ennek eredményeképpen a rendszeres kifejezés reagál a "hasonló" karakterláncra és a Likegens karakterláncra.

Gyakorlati példák

Miután szétszereltük a rendszeres kifejezések alapjait, itt az ideje, hogy valami hasznos legyen velük.

▍ a fájlok száma

Írjon be egy bash szkriptet, amely számítja a fájlokat a rögzített könyvtárakban változó környezet Pálya. Ennek érdekében el kell kezdenie, létrehoznia kell a könyvtárak módjait. Csináljunk sed-vel, cserélje ki a vastagbél a tereken:

$ Echo $ path | Sed "s /: / / g"
A csere parancs támogatja a rendszeres kifejezéseket sablonként a szöveg kereséséhez. Ebben az esetben minden rendkívül egyszerű, vastagbél szimbólumot keresünk, de senki sem használhat itt, és valami más - mindez a konkrét feladattól függ.
Most meg kell mennie a hurokban kapott listán, és végrehajtja a számításhoz szükséges cselekvési fájlok számát. Az általános scriptrendszer ilyen lesz:

MyPath \u003d $ (Echo $ Path | SED "s /: / / g") a $ MyPath könyvtárhoz
Most írja be a szkript teljes szövegét az LS parancs segítségével, hogy információt kapjon az egyes könyvtárakban lévő fájlok számáról:

#! / bin / bash mypath \u003d $ (echo $ path | sed "s /: / / g") count \u003d 0 a könyvtárban a $ mypath do check \u003d $ (ls $ Directory) a $ Check-ben [$ Count + 1] Kész echo "$ Directory - $ Count" Count \u003d 0 Kész
A forgatókönyv elindításakor kiderülhet, hogy az útvonalból származó egyes könyvek nem léteznek, de nem akadályozza meg, hogy a fájlokat a meglévő igazgatókban számolja ki.


Fájlok számlálása

A példa fő értéke ugyanaz a megközelítés, sokkal összetettebb feladatok megoldása. Pontosan mi - az Ön igényeitől függ.

▍ Ellenőrizze az e-mail címeket

Vannak olyan weboldalak, amelyek hatalmas gyűjteményekkel rendelkeznek, amelyek lehetővé teszik a címek ellenőrzését email, Telefonszámok és így tovább. Az egyik dolog azonban készen áll, és egészen egy másik - hozzon létre valamit. Ezért írjon rendszeres kifejezést az e-mail címek ellenőrzéséhez. Kezdjük a forrásadatok elemzésével. Itt például egy bizonyos cím:

[E-mail védett]
A felhasználónév, a felhasználónév, alfanumerikus és néhány más karakterből állhat. Nevezetesen, ez egy pont, dash, az adhézió szimbóluma, a plusz jel. A felhasználónév mögött alá kell írnia @.

Fegyveres ezekkel a tudással, kezdjük össze egy rendszeres kifejezést a bal oldali részéről, amely a felhasználónév ellenőrzésére szolgál. Ez az, amit tettünk:

^(+)@
Ez a reguláris kifejezés megtalálható a következő: „Az elején a sor, ott kell lennie legalább egy karaktert azoktól, amelyek a csoportban meghatározott szögletes zárójelben, és azt követően, hogy a @ jel kell menni.

Most - a gazdanév neve - HostName. Ugyanezek a szabályok itt alkalmazhatók a felhasználónévre, így a sablon így fog kinézni:

(+)
domain név felső szint OBEYS különleges szabályokat. Csak olyan betűs karakterek lehetnek, amelyeknek legalább kétnek kell lenniük (például az ilyen tartományok általában tartalmazzák az országkódot), és legfeljebb öt. Mindez azt jelenti, hogy a cím utolsó részének ellenőrzésére szolgáló sablon:

\.({2,5})$
Ezt úgy olvashatja, mint ez: "Először is egy pont, majd - 2-5 ábécé karakter, majd a vonal vége."

Készítsen sablonokat a rendszeres kifejezés egyes részeihez, összegyűjtjük őket:

^(+)@(+)\.({2,5})$
Most csak akkor marad, ha tesztelte, mi történt:

$ echo " [E-mail védett]"| Awk" / ^ (+) @ (+) \\. ((2,5) $$ / (PRINT $ 0) "$ ECHO" [E-mail védett]"| Awk" / ^ (+) @ (+) \\. ((2,5) $ 0) "/ (nyomtatás $ 0)"


Ellenőrizze az e-mail címet rendszeres kifejezésekkel

Az a tény, hogy az átvitt AWK szöveg jelenik meg a képernyőn, azt jelenti, hogy a rendszer felismerte az e-mail címet.

EREDMÉNYEK

Ha az e-mail címek ellenőrzésére szolgáló rendszeres kifejezés, amely a cikk elején találkozott, teljesen érthetetlennek tűnt, remélhetőleg, most nem úgy néz ki, mint egy értelmetlen karakterkészlet. Ha ez igaz - ez azt jelenti, hogy ez az anyag teljesítette a rendeltetési helyét. Tény, hogy a rendszeres kifejezések olyan témák, amelyek minden életben részt vehetnek, de még a kis dolog, amit szétszereltünk, már képes segíteni Önnek olyan írásbeli írásban, amelyek nagyon fejlett szövegek.

Ebben az anyagsorozatban általában nagyon megmutattuk egyszerű példák Bash szkriptek, amelyek szó szerint több sorból állt. Legközelebb valami nagy méretűnek tartjuk.

Kedves olvasók! Rendszeres kifejezéseket használ, amikor a szövegeket a parancssori szkriptek feldolgozása során?

Jó idő, vendégek!

A mai cikkben szeretnék érinteni egy ilyen hatalmas témát Rendszeres kifejezések. Azt hiszem, mindenki tudja, hogy a Regquins témája (így rendszeres kifejezéseket hívnak szlengben) - hatalmas mennyiségben. Ezért megpróbálom röviden, de ahogy tudod megérteni, hogyan kell összegyűjteni a gondolataimat egy csomóban, és közvetítik őket.

Elkezdem azzal a ténnyel, hogy számos rendes kifejezés létezik:

1. Hagyományos rendszeres kifejezések (Ezek alapvetőek, alapvetőek és alapvető rendszeres kifejezések (BRE))

  • ezeknek a kifejezéseknek a szintaxisát az elavult, de mindazonáltal még mindig széles körben elterjedt, és sok UNIX segédprogram által használt
  • A fő rendszeres kifejezések közé tartoznak a következő metasimwols (az alábbi értékekről):
    • \\ (\\) - a kezdeti opció () (fejlett)
    • \\ (\\) - a kezdeti opció () (fejlett)
    • \n. hol n. - 1-től 9-ig
  • Az adatok Metasimvols használatának jellemzői:
    • A csillagnak egyetlen szimbólumnak megfelelő kifejezés után kell követnie. Példa: *.
    • Kifejezés \\( blokk\\) * Úgy kell tekinteni, hogy tévednek. Bizonyos esetekben nulla vagy több ismétlésnek felel meg blokk . Másokban megegyezik a karakterláncnak blokk* .
    • A szimbolikus osztály belsejében speciális karakterek főként figyelmen kívül hagyják. Különleges esetek:
    • A szimbólum hozzáadása ^ egy készletbe, először nem kell elhelyezni.
    • A szimbólum hozzáadásához a készlethez először kell elhelyezni. Például:
      • dNS-nevű sablon, ahol betűk, számok, mínusz és pont-elválasztó tartalmazhat: [-0-9A-ZA-Z.];
      • bármely karakter, mínusz és számok mellett: [^ -0-9].
    • Ahhoz, hogy hozzáadjon egy [vagy] szimbólumot a készlethez, először ott kell elhelyezni. Például:
      • megfelel], [, a vagy b.

2. Kiterjesztett rendszeres kifejezések (ők kiterjesztett rendszeres kifejezések (ERE))

  • Ezeknek a kifejezéseknek a szintaxisa hasonló a fő kifejezések szintaxisához, kivéve:
    • Törölte a Metasimvols () és () fordított fonott vonal használatát.
    • A metakimol előtti fordított süllyedő vonal megszakad a különleges jelentését.
    • Elméletileg elutasították szabálytalan tervezés \\ t n. .
    • Hozzáadott metakimol + ,? , | .

3. Rendszeres kifejezések kompatibilisek a perl(ők Perl-kompatibilis rendszeres kifejezések (PCRE))

  • van gazdagabb és ugyanakkor kiszámítható szintaxis, mint a POSIX ERE, így az alkalmazásokat gyakran használják.

Rendszeres kifejezések magába foglalsablonok Adja meg a sablont Keresés. A minta áll nak,-nek szabályokkeresés, amelyet összeállítottak szimbólumokés metaszimvolov.

Keresési szabályok Az alábbiak szerint definiálva tevékenységek:

Listázás |

Függőleges vonás (|) Megosztja a megengedett lehetőségeket, azt mondhatjuk - logikus vagy. Például a "szürke | szürke" megfelel szürke. vagy szürke.

Csoportosítás vagy szakszervezet ()

Kerek zárójel Az üzemeltetők cselekvési területének meghatározására és prioritására. Például "szürke | szürke" és "GR (A | E) Y" különböző minták, de mindkettő leírja a szürke. és szürke.

Számszerűsítés ()? * +.

Számszerűsítő Egy szimbólum vagy csoport után meghatározza, hogy hányszor előzőa kifejezés előfordulhat.

Általános kifejezés, ismétlések lehetnek m-től n-ig terjedő.

általános kifejezés m és több ismétlés.

általános kifejezés legfeljebb n repetition.

sima n repetitions.

Kérdőjeleszközök 0 vagy 1. ugyanaz, mint a {0,1} . Például: "Colou? R" megfelel szín, I. szín..

Csillageszközök 0, 1 vagy bármely szám Egyszer ( {0,} ). Például a "Go * Gle" megfelel kint, gogle., google satöbbi.

Egy pluszeszközök legalább 1. Egyszer ( {1,} ). Például a "Go + Gle" mérkőzések gogle., google stb. (de nem kint).

Ezeknek a rendszeres kifejezéseknek a specifikus szintaxisja a végrehajtástól függ. (vagyis alapvető rendszeres kifejezések Szimbólumok (és)- árnyékolt backlash)

FőképekEgyszerűen ezek olyan szimbólumok, amelyek nem felelnek meg valódi értéküknek, azaz a szimbólum. (Pont) nem egy pont, hanem bármelyik karakter, stb. Kérjük, ismerje meg a metasimvolokkal és értékeikkel:

. megfelelnek egybármilyen szimbólum
[valami] Megfelelnek bármelyikszimbólum a börtönben lévő foglyok számából. Ugyanakkor: A "-" szimbólum szó szerint csak akkor értelmezhető, ha közvetlenül a záró konzol megnyitása vagy előtt helyezkedik el: vagy [-ABC]. Ellenkező esetben a karakterek intervallumát jelöli. Például megfelel az "A", "B" vagy "C". megfelel a latin latin ábécé betűinek. Ezek a megnevezések kombinálhatók: megfelelnek a, b, c, q, r, s, t, u, v, w, x, y, zc-nek, hogy megállapítsák a karakterek levelezését "[" vagy "]", elég A záróelemhez az első karakter volt a nyitás után: "]", "[", "A" vagy "B". Ha a négyzet alakú zárójelben lévő értéket a szimbólummal mutatták be, akkor a kifejezés értéke megfelel nak nek egyetlen szimbólum közöttük amelyek nem zárójelben vannak. Például [^ ABC] megfelel az "A", "B" vagy "C" kivételével. [^ a-z] minden karakternek felel meg, kivéve az alsó regiszter szimbólumait a latin ábécében.
^ Megfelel a szöveg kezdetének (vagy bármely karakterlánc kezdete, ha a vonal a vonal).
$ Megfelel a szövegének végéhez (vagy bármely karakterlánc vége, ha a vonal üzemmód).
\\ (\\) vagy () "Nevű" (csoportosított kifejezés), amelyet később használhatunk (lásd a következő elemet: \\ n.). "Bejelentett előfizetés" is "blokk". Más operátorokkal ellentétben ez a (hagyományos szintaxisban) bexlesh-t igényel, egy kiterjesztett és a perl szimbólum nem szükséges.
\n. Hol n. - Ez egy 1-től 9-ig terjedő szám; megfelelnek n.- Az otthoni megfigyelés (például (ABCD) \\ 0, azaz az ABCD karaktereket nulla módon jelöljük). Ez a design elméletileg szabálytalanNem fogadta el a rendszeres kifejezések fejlett szintaxisában.
*
  • Csillagmiután az egység szimbólumának megfelelő kifejezés megfelel nullavagy több másolatoke (megelőző) kifejezés. Például a "*" egy üres karakterláncnak felel meg, "X", "Y", "ZX", "ZYX", stb.
  • \n.*, hol n. - Ez egy szám 1-től 9-ig, megfelel a nulla vagy több megfelelőségi bejegyzésnek. n.- jelentős utánzás. Például, "\\ (a. \\) C \\ 1 *" megfelel az "ABCAB" és az "ABCABA", de nem "ABCAC".

A "\\ (" és "\\)" és a "*" kíséretében kötött kifejezésnek helytelennek kell tekinteni. Bizonyos esetekben a zárójelben lévő karakterlánc nulla vagy több előfordulásának felel meg. Másokban megfelel a zárójelben lévő kifejezésnek, tekintettel a "*" szimbólumra.

\{x.,y.\} Megfelel az utolsónak ( közelgő) legalább egy blokk, amely legalább x. és nincs többé y. idő. Például az "A \\ (3.5 \\)" megfelel az "AAA", "AAAA" vagy "AAAAA". Más szereplőkkel ellentétben ez (a hagyományos szintaxisban) bexlesh-t igényel.
.* A rendszeres kifejezés két részének bármely karakterének bármely számának megnevezése.

MetasimWalls Segítünk a különböző megfelelőség használatához. De hogyan lehet elképzelni a metacimumot a szokásos szimbólum, azaz a szimbólum [(négyzet alakú konzol) a négyzet alakú konzol értéke? Egyszerűen:

  • meg kell akadályozni ( pajzs) Metakimol (. * + \\? ()). Például \\. vagy \\ [

Néhány karakterkészletek feladatainak egyszerűsítése, az úgynevezett. osztályok és karakterek kategóriái. POSIX szabványosított nyilatkozat egyes osztályokról és karakterkategóriákról, amint az a következő táblázatban látható:

Posztixosztály hasonlóképpen kijelölés
[: Felső:] a felső nyilvántartás szimbólumai
[: Alsó:] az alsó nyilvántartás szimbólumai
[: Alpha:] a felső és alsó regiszter szimbólumai
[: ALNUM:] számok, felső és alsó regiszter szimbólumok
[: DIGIT:] számok
[: XDigit:] hexadecimális számok
[: Punct:] [.,!?:…] az írásjelek jelei
[: Üres:] []] hely és fül.
[: Tér:] [\\ t \\ n \\ f] a PASS szimbólumai
[: Cntrl:] vezérlő szimbólumok
[: Grafikon:] [^ t \\ n r \\ f] a nyomtatás szimbólumai
[: Nyomtatás:] [^ t \\ n r \\ f] nyomtatási szimbólumok és átugró szimbólumok

A Regexnek olyan dolog van, mint:

Regex kapzsiság

Megpróbálom leírni a lehető legtisztábbnak. Tegyük fel, hogy mindent megtalálunk HTML-címkék Egyes szövegekben. Elhelyezte a feladatot, meg akarjuk találni a foglyok közötti értékeket< и >, ezekkel a sarkokkal együtt. De tudjuk, hogy a címkék vannak különböző hosszúságú És a címkék maguk, legalább 50 darab. Sorolja fel őket mindannyian, zárva a metakaratív - a feladat túlságosan időigényes. De tudjuk, hogy van egy kifejezésünk. * (Point Asterisk), amely jellemzi a karakterlánc bármely karakterét. Ezzel a kifejezéssel megpróbáljuk megtalálni a szöveget (

Így, Hogyan hozzunk létre egy 10/50 RAID az LSI MegaRAID vezérlő (releváns és: Intel SRCU42X, Intel SRCS16):

) minden érték között< и >. Ennek eredményeképpen az egész karakterlánc megfelel ennek a kifejezésnek. Miért, mert Remex - Zhaden és megpróbálja megragadni a karakterek között< и >, illetve az egész sor kezdődik < p\u003e így, ...És befejeződés ...> ez a szabályhoz tartozik!

Remélem például, világos, hogy mi a kapzsiság. Ahhoz, hogy megszabaduljon ehhez a kapzsiságtól, akkor megy a következő módon:

  • vegye figyelembe a karaktereket nem Releváns kívánt minta (például:<[^>] *\u003e A fentiekben ismertetett esetben)
  • megbízható a kapzsiságból, ha nem kívánatos számszerűsítő definíciót ad hozzá:
    • *? - "Nem kapzsi" ("lusta") egyenértékű *
    • +? - "Nem kapzsi" ("lusta") egyenértékű +
    • (n,)? - "Nem kapzsi" ("lusta") egyenértékű (n,)
    • . *? - "Nem kapzsi" ("lusta") egyenértékű. *

A fentiek kiegészítik a kiterjesztett rendszeres kifejezések szintaxisai:

A POSIX rendszeres kifejezések hasonlóak a hagyományos Unix szintaxishoz, de néhány metasimvolok hozzáadásával:

Egy pluszezt jelzi előzőszimbólum vagy csoportmegismételhető egy vagy többször. A csillagokkal ellentétben legalább egy ismétlésre van szükség.

Kérdőjel Csinál. előzőa szimbólum vagy csoport opcionális. Más szóval, a megfelelő sorban hiányozhat vagy jelen lehet sima egyidő.

Függőleges tulajdonságmegoszt alternatív lehetőségek Rendszeres kifejezések. Az egyik karakter két alternatívát határoz meg, de lehet, hogy többek közülük, elegendő függőleges screak alkalmazása. Emlékeztetni kell arra, hogy ez az üzemeltető a kifejezés maximális lehetséges részét használja. Ezért az alternatív üzemeltetőt leginkább a zárójelben használják.

Azt is törölték, hogy a fordított fonat használata [... \\) válik (...) és \\ (... \\) válik (...).

A hozzászólás végén néhány példát adok a Regex használatára:

$ Cat Text1 1 Apple 2 körte 3 banán $ grep p text1 1 Apple 2 körte $ grep "pp *" text1 1 Apple 2 körte $ Cat Text1 | Grep "l \\ | n" 1 Apple 3 banán $ echo -e "Keressen egy n * itt" | Grep "\\ *" * itt $ GREP "PL \\? * R" TEXT1 # P, olyan vonalakon, ahol R 2 Pear $ grep "a .." szöveg1 # sorok A, majd legalább 2 szimbólum 1 Apple 3 Banana $ grep "" Text1 # Keresés a vonalakon, ahol van 3 vagy P 1 Apple 2 PEAR 3 banán $ echo -e "keressünk egy \\ N * Itt \\ Nsomewhere." | Grep "[. *]" * Itt valahol ... name..name] $ echo -e "123 \\ n456 \\ n789 \\ n0" | grep "" 123 456 789 $ sed -e "/ (a. **) \\ | \\ (-p. * / A / S / A / A / G" TEXT1 # csere és minden sorban, ahol utána és azt megy, vagy P, P 1 Apple 2 körte 3 banán * \\ ./ utolsó szó ./g "Először is. Ez egy utolsó szó. Ez egy utolsó szó.

Tisztelettel, MC.SIM!

A mai cikkben szeretnék érinteni egy ilyen hatalmas témát Rendszeres kifejezések. Azt hiszem, mindenki tudja, hogy a Regquins témája (így rendszeres kifejezéseket hívnak szlengben) - hatalmas mennyiségben.

Elkezdem azzal a ténnyel, hogy számos rendes kifejezés létezik:

1. Hagyományos rendszeres kifejezések (Ezek alapvetőek, alapvetőek és alapvető rendszeres kifejezések (BRE))

  • ezeknek a kifejezéseknek a szintaxisát az elavult, de mindazonáltal még mindig széles körben elterjedt, és sok UNIX segédprogram által használt
  • A fő rendszeres kifejezések közé tartoznak a következő metasimwols (az alábbi értékekről):
    • \\ (\\) - a kezdeti opció () (fejlett)
    • \\ (\\) - a kezdeti opció () (fejlett)
    • \n. hol n. - 1-től 9-ig
  • Az adatok Metasimvols használatának jellemzői:
    • A csillagnak egyetlen szimbólumnak megfelelő kifejezés után kell követnie. Példa: *.
    • Kifejezés \\( blokk\\) * Úgy kell tekinteni, hogy tévednek. Bizonyos esetekben nulla vagy több ismétlésnek felel meg blokk . Másokban megegyezik a karakterláncnak blokk* .
    • A szimbolikus osztály belsejében speciális karakterek főként figyelmen kívül hagyják. Különleges esetek:
    • A szimbólum hozzáadása ^ egy készletbe, először nem kell elhelyezni.
    • A szimbólum hozzáadásához a készlethez először kell elhelyezni. Például:
      • dNS-nevű sablon, ahol betűk, számok, mínusz és pont-elválasztó tartalmazhat: [-0-9A-ZA-Z.];
      • bármely karakter, mínusz és számok mellett: [^ -0-9].
    • Ahhoz, hogy hozzáadjon egy [vagy] szimbólumot a készlethez, először ott kell elhelyezni. Például:
      • megfelel], [, a vagy b.

2. Kiterjesztett rendszeres kifejezések (ők kiterjesztett rendszeres kifejezések (ERE))

  • Ezeknek a kifejezéseknek a szintaxisa hasonló a fő kifejezések szintaxisához, kivéve:
    • Törölte a Metasimvols () és () fordított fonott vonal használatát.
    • A metakimol előtti fordított süllyedő vonal megszakad a különleges jelentését.
    • Elméletileg elutasították szabálytalan tervezés \\ t n. .
    • Hozzáadott metakimol + ,? , | .

3. Rendszeres kifejezések kompatibilisek a perl(ők Perl-kompatibilis rendszeres kifejezések (PCRE))

  • van gazdagabb és ugyanakkor kiszámítható szintaxis, mint a POSIX ERE, így az alkalmazásokat gyakran használják.

Rendszeres kifejezések magába foglalsablonok Adja meg a sablont Keresés. A minta áll nak,-nek szabályokkeresés, amelyet összeállítottak szimbólumokés metaszimvolov.

Keresési szabályok Az alábbiak szerint definiálva tevékenységek:

Listázás |

Függőleges vonás (|) Megosztja a megengedett lehetőségeket, azt mondhatjuk - logikus vagy. Például a "szürke | szürke" megfelel szürke. vagy szürke.

Csoportosítás vagy szakszervezet ()

Kerek zárójel Az üzemeltetők cselekvési területének meghatározására és prioritására. Például "szürke | szürke" és "GR (A | E) Y" különböző minták, de mindkettő leírja a szürke. és szürke.

Számszerűsítés ()? * +.

Számszerűsítő Egy szimbólum vagy csoport után meghatározza, hogy hányszor előzőa kifejezés előfordulhat.

Általános kifejezés, ismétlések lehetnek m-től n-ig terjedő.

általános kifejezés m és több ismétlés.

általános kifejezés legfeljebb n repetition.

sima n repetitions.

Kérdőjeleszközök 0 vagy 1. ugyanaz, mint a {0,1} . Például: "Colou? R" megfelel szín, I. szín..

Csillageszközök 0, 1 vagy bármely szám Egyszer ( {0,} ). Például a "Go * Gle" megfelel kint, gogle., google satöbbi.

Egy pluszeszközök legalább 1. Egyszer ( {1,} ). Például a "Go + Gle" mérkőzések gogle., google stb. (de nem kint).

Ezeknek a rendszeres kifejezéseknek a specifikus szintaxisja a végrehajtástól függ. (vagyis alapvető rendszeres kifejezések Szimbólumok (és)- árnyékolt backlash)

FőképekEgyszerűen ezek olyan szimbólumok, amelyek nem felelnek meg valódi értéküknek, azaz a szimbólum. (Pont) nem egy pont, hanem bármelyik karakter, stb. Kérjük, ismerje meg a metasimvolokkal és értékeikkel:

. megfelelnek egybármilyen szimbólum
[valami] Megfelelnek bármelyikszimbólum a börtönben lévő foglyok számából. Ugyanakkor: A "-" szimbólum szó szerint csak akkor értelmezhető, ha közvetlenül a záró konzol megnyitása vagy előtt helyezkedik el: vagy [-ABC]. Ellenkező esetben a karakterek intervallumát jelöli. Például megfelel az "A", "B" vagy "C". megfelel a latin latin ábécé betűinek. Ezek a megnevezések kombinálhatók: megfelelnek a, b, c, q, r, s, t, u, v, w, x, y, zc-nek, hogy megállapítsák a karakterek levelezését "[" vagy "]", elég A záróelemhez az első karakter volt a nyitás után: "]", "[", "A" vagy "B". Ha a négyzet alakú zárójelben lévő értéket a szimbólummal mutatták be, akkor a kifejezés értéke megfelel nak nek egyetlen szimbólum közöttük amelyek nem zárójelben vannak. Például [^ ABC] megfelel az "A", "B" vagy "C" kivételével. [^ a-z] minden karakternek felel meg, kivéve az alsó regiszter szimbólumait a latin ábécében.
^ Megfelel a szöveg kezdetének (vagy bármely karakterlánc kezdete, ha a vonal a vonal).
$ Megfelel a szövegének végéhez (vagy bármely karakterlánc vége, ha a vonal üzemmód).
\\ (\\) vagy () "Nevű" (csoportosított kifejezés), amelyet később használhatunk (lásd a következő elemet: \\ n.). "Bejelentett előfizetés" is "blokk". Más operátorokkal ellentétben ez a (hagyományos szintaxisban) bexlesh-t igényel, egy kiterjesztett és a perl szimbólum nem szükséges.
\n. Hol n. - Ez egy 1-től 9-ig terjedő szám; megfelelnek n.- Az otthoni megfigyelés (például (ABCD) \\ 0, azaz az ABCD karaktereket nulla módon jelöljük). Ez a design elméletileg szabálytalanNem fogadta el a rendszeres kifejezések fejlett szintaxisában.
*
  • Csillagmiután az egység szimbólumának megfelelő kifejezés megfelel nullavagy több másolatoke (megelőző) kifejezés. Például a "*" egy üres karakterláncnak felel meg, "X", "Y", "ZX", "ZYX", stb.
  • \n.*, hol n. - Ez egy szám 1-től 9-ig, megfelel a nulla vagy több megfelelőségi bejegyzésnek. n.- jelentős utánzás. Például, "\\ (a. \\) C \\ 1 *" megfelel az "ABCAB" és az "ABCABA", de nem "ABCAC".

A "\\ (" és "\\)" és a "*" kíséretében kötött kifejezésnek helytelennek kell tekinteni. Bizonyos esetekben a zárójelben lévő karakterlánc nulla vagy több előfordulásának felel meg. Másokban megfelel a zárójelben lévő kifejezésnek, tekintettel a "*" szimbólumra.

\{x.,y.\} Megfelel az utolsónak ( közelgő) legalább egy blokk, amely legalább x. és nincs többé y. idő. Például az "A \\ (3.5 \\)" megfelel az "AAA", "AAAA" vagy "AAAAA". Más szereplőkkel ellentétben ez (a hagyományos szintaxisban) bexlesh-t igényel.
.* A rendszeres kifejezés két részének bármely karakterének bármely számának megnevezése.

MetasimWalls Segítünk a különböző megfelelőség használatához. De hogyan lehet elképzelni a metacimumot a szokásos szimbólum, azaz a szimbólum [(négyzet alakú konzol) a négyzet alakú konzol értéke? Egyszerűen:

  • meg kell akadályozni ( pajzs) Metakimol (. * + \\? ()). Például \\. vagy \\ [

Néhány karakterkészletek feladatainak egyszerűsítése, az úgynevezett. osztályok és karakterek kategóriái. POSIX szabványosított nyilatkozat egyes osztályokról és karakterkategóriákról, amint az a következő táblázatban látható:

Posztixosztály hasonlóképpen kijelölés
[: Felső:] a felső nyilvántartás szimbólumai
[: Alsó:] az alsó nyilvántartás szimbólumai
[: Alpha:] a felső és alsó regiszter szimbólumai
[: ALNUM:] számok, felső és alsó regiszter szimbólumok
[: DIGIT:] számok
[: XDigit:] hexadecimális számok
[: Punct:] [.,!?:…] az írásjelek jelei
[: Üres:] []] hely és fül.
[: Tér:] [\\ t \\ n \\ f] a PASS szimbólumai
[: Cntrl:] vezérlő szimbólumok
[: Grafikon:] [^ t \\ n r \\ f] a nyomtatás szimbólumai
[: Nyomtatás:] [^ t \\ n r \\ f] nyomtatási szimbólumok és átugró szimbólumok

A Regexnek olyan dolog van, mint:

Regex kapzsiság

Megpróbálom leírni a lehető legtisztábbnak. Tegyük fel, hogy néhány szövegben megtaláljuk az összes HTML-címkét. Elhelyezte a feladatot, meg akarjuk találni a foglyok közötti értékeket< и >, ezekkel a sarkokkal együtt. De tudjuk, hogy a címkéknek van egy másik hossza és címkéje, legalább 50 darab. Sorolja fel őket mindannyian, a metachamivol lezárásával - a feladat túlságosan időigényes. De tudjuk, hogy van egy kifejezésünk. * (Point Asterisk), amely jellemzi a karakterlánc bármely karakterét. Ezzel a kifejezéssel megpróbáljuk megtalálni a szöveget (

Így, Hogyan hozzunk létre egy 10/50 RAID az LSI MegaRAID vezérlő (releváns és: Intel SRCU42X, Intel SRCS16):

) minden érték között< и >. Ennek eredményeképpen az egész karakterlánc megfelel ennek a kifejezésnek. Miért, mert Remex - Zhaden és megpróbálja megragadni a karakterek között< и >, illetve az egész sor kezdődik < p\u003e így, ...És befejeződés ...> ez a szabályhoz tartozik!

Remélem például, világos, hogy mi a kapzsiság. Ahhoz, hogy megszabaduljon ehhez a kapzsiságtól, akkor megy a következő módon:

  • vegye figyelembe a karaktereket nem Releváns kívánt minta (például:<[^>] *\u003e A fentiekben ismertetett esetben)
  • megbízható a kapzsiságból, ha nem kívánatos számszerűsítő definíciót ad hozzá:
    • *? - "Nem kapzsi" ("lusta") egyenértékű *
    • +? - "Nem kapzsi" ("lusta") egyenértékű +
    • (n,)? - "Nem kapzsi" ("lusta") egyenértékű (n,)
    • . *? - "Nem kapzsi" ("lusta") egyenértékű. *

A fentiek kiegészítik a kiterjesztett rendszeres kifejezések szintaxisai:

A POSIX rendszeres kifejezések hasonlóak a hagyományos Unix szintaxishoz, de néhány metasimvolok hozzáadásával:

Egy pluszezt jelzi előzőszimbólum vagy csoportmegismételhető egy vagy többször. A csillagokkal ellentétben legalább egy ismétlésre van szükség.

Kérdőjel Csinál. előzőa szimbólum vagy csoport opcionális. Más szóval, a megfelelő sorban hiányozhat vagy jelen lehet sima egyidő.

Függőleges tulajdonságmegosztja az alternatív lehetőségeket a rendszeres kifejezésekhez. Az egyik karakter két alternatívát határoz meg, de lehet, hogy többek közülük, elegendő függőleges screak alkalmazása. Emlékeztetni kell arra, hogy ez az üzemeltető a kifejezés maximális lehetséges részét használja. Ezért az alternatív üzemeltetőt leginkább a zárójelben használják.

Azt is törölték, hogy a fordított fonat használata [... \\) válik (...) és \\ (... \\) válik (...).

A hozzászólás végén néhány példát adok a Regex használatára:

$ CAT TEXT1 1 Apple 2 körte 3 banán $ grep p text1 1 Apple 2 körte $ GREP borsó text1 2 körte $ grep "P *" text1 1 Apple 2 körte 3 banán $ grep "pp *" text1 1 Apple 2 körte $ grep " X "TEXT1 $ GREP" X * "TEXT1 1 Apple 2 körte 3 banán $ Cat Text1 | Grep "l \\ | n" 1 Apple 3 banán $ echo -e "Keressen egy n * itt" | Grep "\\ *" * itt $ grep "pp \\ +" text1 # Strings, egy tartalom egy p és 1 vagy több P 1 alma $ grep "pl \\? E" text1 1 Apple 2 körte $ grep "pl \\? E "TEXT1 # PE egy lehetséges szimbólummal L 1 Apple 2 körte $ GREP" P. * R "TEXT1 # P, vonalakban, ahol R 2 körte $ grep" a .. "szöveg1 # sorok a, majd a legalább 2 karakter 1 Apple 3 Banana $ GREP "\\ (egy \\) +" text1 # Keresés több ismétlés egy 3 banán $ grep "ana (egy \\) \\ +" text1 # keresés a 2x ismétléshez 3 banán $ 3 Banana $ GREP "" Text1 # keresési sorok, ahol 3 vagy p 1 Apple 2 körte 3 banán $ echo -e "Keressen egy n * itt \\ nsomewhere." | MREP "[. *]" * Itt van. $ # Keres szimbólumokat 3-ról 7 $ echo -e "123 \\ n456 \\ n789 \\ n0" | Grep "" "123 456 789 $ # egy számjegyet keres, mögötte nincs betű n és r $ grep a vonal végéig" [[: Digit:]] [^ nr] * $ "TEXT1 1 Apple $ Sed -e "/ \\ (a. * A) \\ | \\ (p. * P) / s / a / a / g" text1 # csere, és az összes sorban, ahol az R és vagy után r megy P 1 Apple 2 körte 3 banán $ sed -e "/ ^ [^ lmnxyz] * $ / s / fül / mindegyik / g" text1 # A fül cseréje mindegyik sorban nem kezdődik az LMNXYZ 1 Apple 2 Peach 3 banán $ echo " . Egy kifejezés. Ez egy érzékeny. " | \\ # Az utolsó szó cseréje egy mondatban az utolsó világban. \u003e Sed -e "s / [^] * \\ ./ utolsó szó ./g" Először is. Utolsó szó. Ez egy utolsó szó.

A rendszeres kifejezések nagyon hatékony eszköz a sablonon, a feldolgozáson és a vonalakon lévő szöveg kereséséhez, amelyek különböző feladatok megoldására használhatók. Itt vannak a fő részük:

  • Szövegbevitel ellenőrzése;
  • Keresés és cserélje ki a szöveget a fájlban;
  • Csomagszenaming fájlok;
  • Kölcsönhatás olyan szolgáltatásokkal, mint az Apache;
  • A karakterlánc ellenőrzése a sablonhoz.

Ez messze van teljes listaA rendszeres kifejezések lehetővé teszik, hogy sokkal többet tegyenek. De az új felhasználók számára túlságosan bonyolultnak tűnhetnek, mivel különleges nyelvet használnak azokat. De tekintettel a rendelkezésre álló lehetőségek, a Linux rendszeres kifejezéseknek tudnia kell, és képesek lesznek használni mindegyiket rendszergazda.

Ebben a cikkben a kezdőknek rendszeres bash kifejezéseket fogunk megfontolni, hogy foglalkozzon az eszköz összes képességével.

Rendszeres kifejezések esetén kétféle karakter használható:

  • rendes betűk;
  • metakimol.

A hagyományos karakterek betűk, számok és írásjelek, amelyekből bármely vonal áll. Az összes szöveg betűkből áll, és rendszeres kifejezésekben használhatja őket a kívánt pozíció kereséséhez a szövegben.

A metasimwalls valami más, az, akik erőt adnak a rendszeres kifejezéseknek. A Metasimvol segítségével sokkal többet tehetsz, mint egy szimbólum keresése. A karakterek kombinációit keresheti, használja a számuk dinamikus számát, és válassza ki a tartományokat. Minden speciális keverő kétféle típusra osztható, ezek azok a helyettesítő szimbólumok, amelyek helyébe hagyományos karakterek vannak, vagy azt jelzik, hogy hányszor ismételhetik meg a szimbólumot. A rendszeres kifejezés szintaxisa úgy néz ki, mint:

normal_simviv speciális mixer_productor

special simal_zames speciális mixer_productor

  • - fordított fonat, az alfabetikus szakemberek megkezdődnek, és azt használják, ha különleges monitor használatra van szükség írásjelek formájában;
  • ^ - jelzi a vonal kezdetét;
  • $ - jelzi a vonal végét;
  • * - azt jelzi, hogy az előző szimbólum megismételhető 0 vagy több;
  • + - azt jelzi, hogy az előző szimbólumnak több vagy több alkalommal meg kell ismételnie;
  • ? - az előző szimbólum nulla vagy egyszer fordulhat elő;
  • (N) - azt jelzi, hogy hányszor kell megismételnie az előző szimbólumot;
  • (N, n) - az előző szimbólum megismételhető N és N-ig;
  • . - bármilyen karakter a karakterlánc fordítása mellett;
  • - zárójelben meghatározott karakterek;
  • x | W. - X vagy Y szimbólum szimbólum;
  • [^ AZ] - bármilyen karakter, kivéve a zárójelben feltüntetetteket;
  • - a megadott tartomány bármely karaktere;
  • [^ a-z] - bármely olyan karakter, amely nem a tartományban van;
  • b. - a szó határát egy térrel jelöli;
  • B. - azt jelzi, hogy a szimbólumnak a szó belsejében kell lennie, például az UX egybeesik az UXB vagy a Tuxedo-val, de nem egyezik meg a Linuxmal;
  • d. - azt jelenti, hogy a karakter számjegy;
  • D. - nem cyfactory szimbólum;
  • n. - vonal fordítási szimbólum;
  • s. - az egyik szimbólum a tér, a tér, a táblázat, és így tovább;
  • S. - bármilyen karakter egy tér mellett;
  • t. - tabl szimbólum;
  • v. - függőleges táblázatok szimbóluma;
  • w. - minden betűszimbólum, beleértve az aláhúzás;
  • W. - bármilyen betűszimbólum, kivéve az aláhúzást;
  • uxxx - Unicdoe szimbólum.

Fontos megjegyezni, hogy az ikonikus akciók előtt ferde tulajdonságot kell használnia, jelezve, hogy a szakember a következő. Ez a helyes és az ellenkezője, ha szakembert szeretne használni, amelyet egy hagyományos szimbólumként kell alkalmazni, akkor egy ferde-t kell hozzáadnia.

Például meg szeretné találni az 1+ 2 \u003d 3 sort a szövegben. Ha ezt a vonalat rendszeres kifejezésként használja, akkor nem talál semmit, mert a rendszer olyan szakemberként értelmezi a plusz szakembert, amely azt jelenti, hogy az előző egységnek meg kell ismételnie egy vagy több alkalommal. Ezért árnyékolandó: 1 + 2 \u003d 3. Árnyékolás nélkül rendszeres kifejezésünk csak egy 11 \u003d 3 vagy 111 \u003d 3 és így tovább. Mielőtt a vonal nem szükséges, mert ez nem szakember.

Példák a rendszeres kifejezések használatára

Most, hogy megvizsgáltuk az alapokat, és tudod, hogy minden működik, továbbra is megszilárdítja a rendszeres Linux GREP kifejezésekről szerzett tudásokat a gyakorlatban. Két nagyon hasznos speciális szimbólum ^ és $, ami jelzi a karakterlánc kezdetét és végét. Például szeretnénk megkapni a rendszerünkben regisztrált összes felhasználót, akinek a neve az s-on kezdődik. Ezután rendszeres kifejezést alkalmazhat «^ S». Használhatja az EGREP parancsot:

egrep "^ s" / etc / passwd

Ha a vonal utolsó karakterének megfelelően szeretnénk kiválasztani a vonalat, akkor adhatjuk meg a $ -t. Például válassza az Összes lehetőséget rendszerhasználók, Shell nélkül rekordok az ilyen felhasználókról FALSE véget érve:

egrep "hamis $" / etc / passwd

Az S vagy D indítású felhasználói nevek megjelenítéséhez használjon ilyen kifejezést:

egrep "^" / etc / passwd

Ugyanez az eredmény érhető el a "|" szimbólum használatával. Az első lehetőség jobban megfelel a tartományoknak, és a második gyakran normál vagy / vagy:

egrep "^" / etc / passwd

Most válassza ki az összes felhasználót, akinek a neve nem három karakter. A felhasználónév egy kettősponttal van kitöltve. Azt mondhatjuk, hogy tartalmazhat bármilyen betűszimbólumot, amelyet háromszor meg kell ismételni, a vastagbél előtt:

egrep "^ w (3):" / etc / passwd

következtetések

Ebben a cikkben áttekintettük a rendszeres Linux kifejezéseket, de ezek csak a legnagyobb alapok voltak. Ha egy kicsit mélyebben dohányzik, akkor meg fogja találni, hogy ezzel az eszközzel sokkal érdekesebb dolgokat tehetsz. A rendszeres kifejezések fejlesztésére fordított idő határozottan költséges lesz.

Az előadás végén a Yandex Pro rendszeres kifejezések: