Expresiile regulate și comanda grep

10.4 <> - element de coincidență numărul specificat de ori

Cum să utilizați expresii regulate

Date text joacă un rol important în toate sistemele Unix, cum ar fi Linux. Printre altele, textul este concluzia programelor consola, și fișiere de configurare, rapoarte, etc. Expresiile regulate sunt (probabil), una dintre cele mai dificile concepte de a lucra cu textul, deoarece implică un nivel ridicat de abstractizare. Dar timpul petrecut pe studiul lor, vor fi compensate. A ști cum să folosească expresii regulate, poți să faci lucruri uimitoare, chiar dacă valoarea lor totală să nu fie imediat evidente.

Acest articol va lua în considerare utilizarea de expresii regulate cu comanda grep. Dar utilizarea lor nu se limitează la: expresiile regulate susținute de alte comenzi Linux, multe limbaje de programare sunt folosite pentru configurare (de exemplu, în stabilirea regulilor de mod_rewrite în Apache), precum și unele programe GUI vă permit să se stabilească reguli pentru căutare / copiere / ștergere pentru a suport pentru expresii regulate.

Care sunt expresiile regulate?

În termeni simpli, regulat expresia - un simbol, un model de notație simbolică care se solicită în text. Expresiile regulate sunt susținute de o serie de instrumente de linie de comandă, iar majoritatea limbilor de programare și sunt folosite pentru a facilita rezolvarea problemelor cu manipularea textului. Cu toate acestea, (în cazul în care un pic pentru a ne complexității lor), nu toate expresiile regulate sunt aceleași. Ele pot varia ușor de la un instrument la altul, și limbajul de programare a limbajului. Pentru discuția noastră, ne limităm la expresii regulate descrise în standardul POSIX (care va acoperi cele mai multe dintre instrumentele de linie de comandă), în contrast cu mai multe limbaje de programare (în primul rând Perl), care utilizează un număr mai mare de câteva și mai bogate seturi de notatii.

Programul principal pe care le folosim pentru expresii regulate este prietenul nostru vechi, grep. «Grep» numele vine de fapt de la expresia «la nivel mondial regulat de imprimare exprimare», astfel încât să putem vedea că grep are ceva legătură cu expresii regulate. De fapt, grep caută textul fișiere text care se potrivește cu expresia regulată și imprimă specificate la ieșirea standard orice linie care conține meciul.

grep poate face o căutare pe textul primit la intrare standard, de exemplu:

Expresiile regulate și comanda grep

Această comandă va lista fișierele din directorul / usr / bin, al cărui nume conține subșir «zip».

Programul grep poate căuta text în fișiere.

utilizarea în comun sintaxa:

  • regex - expresia regulată.
  • [File ...] - unul sau mai multe fișiere pe care doriți să căutați o expresie regulată.

[Opțiuni] și [...] fișier poate să nu fie disponibile.

Lista de opțiuni grep cele mai frecvent utilizate:

Simbolurile folosite pentru a exprima numere hexazecimale. In ekvivaletno ASCII: [0-9A-Fa-f]

În aceste expresii, paranteze pătrate și două puncte fac parte dintr-un simbol de înregistrare (intervale) a clasei.

Atenție: În funcție de setările de localizare, [: alnum:]. [: Cuvânt:]. [: Alpha:] și alte game pot include litere alfabetice alfabetului, de exemplu, română. Ie [Alpha:] poate corespunde nu [A-Za-z]. și [A-Za-Za-Ha-I].

Basic (de bază) și extinse expresii regulate (Extended)

Există două tipuri de expresii regulate: Expresii regulate de bază (expresii regulate de bază (BRE)) și expresii regulate (expresii regulate extinse (ERE)) extinse. Noi am luat în considerare posibilitatea oricărei cereri sunt susținute de POSIX compatibil și au realizarea BRE. Un astfel de program este grep nostru.

Care este diferența BRE și ERE? Lucru este metacaracterele. Următoarele metacaracterele recunoscute BRE:

Toate celelalte personaje sunt tratate ca literali. Următoarele meta-caractere (și funcții aferente) adăugate ERE:

Cu toate acestea (și acest lucru este parte amuzant), caracterele „(“, „)“, „“ și „>“ în metacaracterele BRE sunt tratate ca și cum au scăpat cu backslash; în timp ce în ERE metacaractere declarație înainte de orice backslash conduce la faptul că acestea sunt tratate ca literali.

Deoarece caracteristicile pe care le vom continua să ia în considerare, fac parte din ERE (expresii regulate extinse), trebuie să folosim un alt grep. În mod tradițional, se execută egrep de program. dar acum nu este recomandat să utilizați, în schimb, ar trebui să folosească GNU versiunea grep care acceptă, de asemenea, expresii regulate extinse folosind opțiunea -R.

alternative

Prima funcție de expresii regulate extinse, pe care le vom discuta este numit alternativa, care este o oportunitate care permite de a căuta intrarea corespunzătoare din setul de expresii. Ca expresie în paranteze permit meci cu un singur caracter al unui anumit set de caractere, alternative permit potrivirea unui set de linii sau alte expresii regulate.

Pentru a demonstra, vom folosi grep asociat cu ecou. Pentru a începe, să încercăm să verifice conformitatea unui simplu vechi-line:

Un exemplu foarte simplu, pe care am trecut prin conducta de ieșire de ecou la grep și să ia o privire la rezultatul. Atunci când un meci, atunci este imprimată la ieșirea standard; Atunci când un meci nu este găsit, nu afișează nici un rezultat.

Acum vom adăuga alternativa, exprimată ca o bară verticală wildcard:

Aici vom vedea expresia regulată „AAA | BBB“, ceea ce înseamnă că linia sau rând sau rând AAA BBB ». Vă rugăm să rețineți că, deoarece aceasta este o funcție avansată am adăugat la grep Opțiunea -e (alegând în schimb să fie capabil de a utiliza programul de simplu egrep, dar acest lucru nu este recomandat - comanda egrep este acum depășită). Mai mult, am ajuns la concluzia expresia regulată în ghilimele pentru a împiedica interpretarea liniei verticale Basham ca operatorul conductei (pipe). Alternative nu sunt limitate la două opțiuni:

Pentru a combina alternativele cu alte elemente de expresii regulate, putem folosi () la alternative distincte:

Expresiile regulate și comanda grep

Această expresie se va potrivi cu numele fișierelor din lista noastră care încep fie cu «BZ», «gz» sau «zip». Dacă eliminăm parantezele din expresia noastră regulată:

Expresiile regulate și comanda grep

atunci valoarea sa este schimbat, iar acum se va potrivi cu orice nume de fișier care începe cu «bz» sau care conțin «gz» sau care conțin un «zip».

expresii regulate extinse a sprijini mai multe moduri de a specifica numărul de ori același element.

. - o coincidență element de zero sau o dată

  • în cazul în care «n» - acest număr. Putem construi o expresie regulată ca aceasta:

În această expresie ne-am stabilit pentru caracterele paranteze semne de întrebare, pentru a indica faptul că acestea ar trebui să apară zero sau o singură dată. Din nou, pentru că parantezele sunt în mod normal metacaractere (în ERE), în fața lor, am pus înapoi bare oblice, prin care le-au tratat ca literali.

Să încercăm acest lucru:

* - meci de trei elemente sau de mai multe ori

Ca wildcard ?. * Este folosit pentru a indica un element opțional; Cu toate acestea, spre deosebire de ?. element poate apărea orice număr de ori, nu numai odinozhdy. Să presupunem că vrem să vedem dacă un șir de caractere este propunerea; astfel încât, în cazul în care începe cu o literă de capital, atunci acesta conține orice număr de litere mari și mici, spații, și se termină cu un punct. Pentru a respecta acest lucru (foarte aproximativ) definirea unei propuneri, trebuie să utilizați o expresie regulată ca aceasta:

Expresia este format din trei puncte: o expresie placuta care conține o clasă de caractere [: superior:]. o expresie placuta care conține atât clasă de caractere [: superior:] și [: inferior:] și un spațiu, în cele din urmă există un punct, ecranat de un backslash. Al doilea element se încheie cu wildcard *. prin care, după o primă scrisoare de capital din această propoziție poate fi urmată de orice număr de litere și spații mari și mici, și este încă considerată adecvată:

Expresia corespunde primelor două controale, dar nu și al treilea, deoarece îi lipsește simbolul necesar scrisoarea de capital inițial și punctul final.

+ - Element de coincidență una sau mai multe ori

+ Metacaractere funcționează foarte similar cu *. În plus, este nevoie de cel puțin o instanță a elementului precedent pentru a aduce la coincidență. Această expresie regulată se va potrivi doar liniile, format din grupuri de unul sau mai multe caractere alfabetice, separate printr-un singur spațiu:

Vedem că această expresie nu se potrivește cu șirul „a b 9“, deoarece conține un caracter non-alfabetic; și nu corespunde „abc d“, deoarece codul «c» și «d» separate prin mai mult de un caracter spațiu.

<> - element de coincidență numărul specificat de ori

Metacaractere și> sunt folosite pentru a exprima numărul maxim de meciuri minime necesare și. Acestea pot fi setate în patru moduri diferite: