Ús de grep (i egrep) amb expressions regulars

Using Grep With Regular Expressions



Aquest tutorial descriu com s'utilitzen tots dos adherència (i egrep) t o trobar text en fitxers, en la seva forma senzilla i quan es combina amb expressions regulars. Conté diversos exemples i exercicis , més solucions , perquè l'espectador completi.

El nom adherència prové de l'ordre ed (i vim) g / re / p, que significa cercar globalment una expressió regular determinada i imprimir (mostrar) la sortida.







regular Expressions

Les utilitats permeten a l'usuari cercar fitxers de text per a línies que coincideixin amb una expressió regular ( regexp ). Una expressió regular és una cadena de cerca formada per text i un o més d'11 caràcters especials. Un exemple senzill és fer coincidir l’inici d’una línia.



Fitxer de mostra

La forma bàsica de adherència es pot utilitzar per trobar text senzill dins d'un o diversos fitxers. Per provar els exemples, primer creeu el fitxer de mostra.



Utilitzeu un editor com nano o vim per copiar el text següent en un fitxer anomenat myfile .





xyz
xyzde
exyzd
desexar
d? gxyz
xxz
xzz
x z
x * z
xz
x z
XYZ
XYYZ
xYz
xyyz
xyyyz
xyyyyz

Tot i que podeu copiar i enganxar els exemples del text (tingueu en compte que les cometes dobles poden no copiar-se correctament), cal escriure ordres per aprendre-les correctament.

Abans de provar els exemples, consulteu el fitxer de mostra:



$gatmyfile

Cerca simple

Per trobar el text 'xyz' dins del fitxer, executeu el següent:

$adherènciaxyz myfile

Ús de colors

Per mostrar colors, utilitzeu –color (un guionet doble) o simplement creeu un àlies. Per exemple:

$adherència --colorxyz myfile

o bé

$àlies adherència= 'adherència--color '
$adherènciaxyz myfile

Opcions

Opcions habituals utilitzades amb el fitxer adherència l'ordre inclou:

  • -Trobo totes les línies independentment de cas
  • -c comptar quantes línies contenen el text
  • -n línia de visualització números de línies coincidents
  • -Només es mostra dossier noms aquest partit
  • -r recursiu cerca de subdirectoris
  • -V trobar totes les línies NO que conté el text

Per exemple:

$adherència -ixyz myfile# cercar text independentment del cas

$adherència -i Cxyz myfile# compta línies amb text

$adherència -enxyz myfile# mostra els números de línia

Creeu diversos fitxers

Abans d’intentar cercar diversos fitxers, primer creeu diversos fitxers nous:

$troboxyz>myfile1
$trobo -Ixyz nxzz nXYZ>myfile2
$trobo -Ixxx nyyy>myfile3
$gatmyfile1
$gatmyfile2
$gatmyfile3

Cerqueu diversos fitxers

Per cercar diversos fitxers amb noms de fitxer o un comodí, introduïu:

$adherència -i Cxyz myfile myfile1 myfile2 myfile3
$adherència -enxyz meu*
# coincideix amb els noms de fitxer que comencen per 'el meu'

Exercici I

  1. Primer compteu quantes línies hi ha al fitxer / etc / passwd.
Consell: úswc -la /etc/passwd
  1. Ara cerqueu totes les aparicions del text on al fitxer / etc / passwd .
  2. Cerqueu quantes línies del fitxer contenen el text
  3. Cerqueu quantes línies NO contenen el text on .
  4. Cerqueu l'entrada per al vostre inici de sessió a / etc / passwd

Al final d’aquest article es poden trobar solucions per fer exercici.

Ús d’expressions regulars

L'ordre adherència també es pot utilitzar amb expressions regulars mitjançant un o més d'onze caràcters o símbols especials per refinar la cerca. Una expressió regular és una cadena de caràcters que inclou caràcters especials per permetre la concordança de patrons dins de serveis públics com adherència , vaig venir i sed . Tingueu en compte que és possible que les cadenes s’hagin d’incloure entre cometes.

Els caràcters especials disponibles inclouen:

^ Inici d’una línia
$ Final de línia
. Qualsevol caràcter (excepte n línia nova)
* 0 o més de l'expressió anterior
Precedir un símbol el converteix en un caràcter literal

Tingueu en compte que el *, que es pot utilitzar a la línia d'ordres per fer coincidir qualsevol nombre de caràcters, inclòs cap, és no s'utilitza de la mateixa manera aquí.

Tingueu en compte també l’ús de cometes als exemples següents.

Exemples

Per trobar totes les línies que comencen amb text mitjançant el caràcter ^:

$adherència'^ Xyz' fitxer meu

Per trobar totes les línies que acaben amb text mitjançant el caràcter $:

$adherènciaFitxer meu 'xyz $'

Per trobar línies que contenen una cadena amb caràcters ^ i $:

$adherència'^ Xyz $' fitxer meu

Per trobar línies mitjançant . per fer coincidir qualsevol personatge:

$adherència'^ X.z' fitxer meu

Per trobar línies amb el * que coincideixin amb 0 o més de l'expressió anterior:

$adherència‘^ Xy*z ’myfile

Per trobar línies amb. * Que coincideixi amb 0 o més de qualsevol caràcter:

$adherència'^ X.*z ’myfile

Per trobar línies mitjançant per escapar del caràcter *:

$adherència'^ X *z ’myfile

Per trobar el caràcter utilitzeu:

$adherència‘\’ myfile

Expressió grep - egrep

El adherència L'ordre només admet un subconjunt de les expressions regulars disponibles. No obstant això, l'ordre egrep:

  • permet l'ús complet de totes les expressions regulars
  • pot cercar simultàniament més d'una expressió

Tingueu en compte que les expressions s'han d'incloure dins d'un parell de cometes.

Per utilitzar colors, utilitzeu –color o torneu a crear un àlies:

$àlies egrep='egrep --color'

Per tal de cercar-ne més d’un regex el egrep L'ordre es pot escriure sobre diverses línies. Tot i això, també es pot fer amb aquests caràcters especials:

| Alternança, una o altra
(...) Agrupació lògica d’una part d’una expressió
$egrep '(^ root | ^ uucp | ^ mail)' /etc/passwd

Això extreu les línies que comencen amb root, uucp o mail del fitxer, el | símbol que significa qualsevol de les opcions.

Es farà l'ordre següent no funciona, tot i que no es mostra cap missatge, ja que és bàsic adherència L'ordre no admet totes les expressions regulars:

$adherència '(^ root | ^ uucp | ^ mail)' /etc/passwd

No obstant això, a la majoria de sistemes Linux l'ordre grep -E és el mateix que utilitzar egrep :

$adherència -I '(^ root | ^ uucp | ^ mail)' /etc/passwd

Ús de filtres

Tubs és el procés d'enviar la sortida d'una ordre com a entrada a una altra ordre i és una de les eines Linux més potents disponibles.

Els comandaments que apareixen en una canonada sovint es coneixen com a filtres, ja que, en molts casos, passen per dins o modifiquen l’entrada que se’ls passa abans d’enviar el flux modificat a la sortida estàndard.

En el següent exemple, sortida estàndard de ls -l es passa com a entrada estàndard al fitxer adherència comandament. Sortida del fitxer adherència després es passa com a entrada al fitxer més comandament.

Això només mostrarà els directoris a / etc :

$ls -la /etc|adherència'^ D'|més

Les ordres següents són exemples d'ús de filtres:

$ps -ef|adherènciacron

$Qui|adherènciakdm

Fitxer de mostra

Per provar l'exercici de revisió, primer creeu el següent fitxer de mostra.

Utilitzeu un editor com nano o vim per copiar el text següent en un fitxer anomenat gent:

Personal J.Smith 25000
Personal E.Smith 25400
Entrenament A. Brown 27500
Entrenament C.Browen 23400
(Administrador) R.Bron 30500
Goodsout T.Smyth 30000
Personal F.Jones 25000
formació * C.Evans 25500
Goodsout W.Pope 30400
Planta baixa T.Smythe 30500
Personal J.Maler 33000

Exercici II

  1. Mostra el fitxer gent i examinar-ne el contingut.
  2. Cerqueu totes les línies que contenen la cadena Smith al fitxer people.Hint: utilitzeu l'ordre grep però recordeu que, per defecte, distingeix entre majúscules i minúscules.
  3. Creeu un fitxer nou, npeople, que contingui totes les línies que comencin per la cadena Personal al fitxer de persones. Suggeriment: utilitzeu l'ordre grep amb>.
  4. Confirmeu el contingut del fitxer npeople llistant el fitxer.
  5. Ara afegiu totes les línies on finalitza el text amb la cadena 500 al fitxer persones al fitxer npeople.Hint: utilitzeu l'ordre grep amb >>.
  6. Torneu a confirmar el contingut del fitxer npeople enumerant el fitxer.
  7. Cerqueu l’adreça IP del servidor emmagatzemada al fitxer / etc / hosts .Pista: utilitzeu l'ordre grep amb $ (hostname)
  8. Ús egrep per extreure del fitxer / etc / passwd fitxers que contenen les línies de compte lp o la vostra ID d'usuari .

Al final d’aquest article es poden trobar solucions per fer exercici.

Expressions més regulars

Una expressió regular es pot considerar com a comodins dels esteroides.

Hi ha onze caràcters amb significats especials: els claudàtors d'obertura i tancament [], la barra invertida , el cursor ^, el signe dòlar $, el punt o el punt., La barra vertical o el símbol de la canonada |, el signe d'interrogació?, El asterisc o estrella *, el signe més + i el claudàtor rodó d'obertura i tancament {}. Aquests personatges especials també s’anomenen sovint metacaràcters.

Aquí teniu el conjunt complet de caràcters especials:

^ Inici d’una línia
$ Final de línia
. Qualsevol caràcter (excepte n línia nova)
* 0 o més de l'expressió anterior
| Alternança, una o altra
[...] Conjunt explícit de caràcters que coincideixen
+ 1 o més expressions anteriors
? 0 o 1 d'expressió anterior
Precedir un símbol el converteix en un caràcter literal
{...} Notació quantificadora explícita
(...) Agrupació lògica d’una part d’una expressió

La versió per defecte de adherència només té suport limitat per a l'expressió regular. Per tal que tots els exemples següents funcionin, utilitzeu egrep en lloc d'això o grep -E .

Per trobar línies mitjançant | per fer coincidir qualsevol de les expressions:

$egrep‘Xxz|xzz ’myfile

Per trobar línies mitjançant | per fer coincidir qualsevol expressió d'una cadena, també utilitzeu ():

$egrep'^ X(Yz|yz)’El meu fitxer

Per trobar línies amb [] que coincideixi amb qualsevol caràcter:

$egrep'^ X[ii]z ’myfile

Per trobar línies que utilitzen [] per no coincidir amb cap caràcter:

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

Per trobar línies amb el * que coincideixin amb 0 o més de l'expressió anterior:

$egrep‘^ Xy*z ’myfile

Per trobar línies amb el + que coincideixi amb 1 o més de l'expressió anterior:

$egrepFitxer '^ xy + z'

Per trobar línies mitjançant el? perquè coincideixi amb 0 o 1 de l'expressió anterior:

$egrep'^ Xy? Z' myfile

Exercici III

  1. Cerqueu totes les línies que contenen els noms Evans o bé pintor al fitxer gent.
  2. Cerqueu totes les línies que contenen els noms Smith, Smyth o bé Smythe al fitxer gent.
  3. Cerqueu totes les línies que contenen els noms Marró, Browen o bé Font al fitxer persones. Si teniu temps:
  4. Cerqueu la línia que conté la cadena (administrador), inclosos els claudàtors, al fitxer persones.
  5. Cerqueu la línia que conté el caràcter * al fitxer persones.
  6. Combineu el 5 i el 6 anterior per trobar ambdues expressions.

Més exemples

Per trobar línies mitjançant . i * per fer coincidir qualsevol conjunt de caràcters:

$egrep‘^ Xy.*z ’myfile

Per trobar línies amb {} que coincideixin amb N nombre de caràcters:

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

Per trobar línies amb {} que coincideixin amb N o més vegades:

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

Per trobar línies que fan servir {} per coincidir amb N vegades però no més de M vegades:

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

Conclusió

En aquest tutorial vam examinar per primera vegada l’ús de adherència en un format senzill, podeu trobar text en un fitxer o en diversos fitxers. A continuació, hem combinat el text que s’ha de cercar amb expressions regulars senzilles i després amb expressions més complexes egrep .

Propers passos

Espero que aprofiteu els coneixements adquirits aquí. Proveu-ho adherència a les vostres pròpies dades i recordeu, les expressions regulars que es descriuen aquí es poden utilitzar de la mateixa forma a nosaltres , sed i awk !

Solucions d’exercici

Exercici I

Primer compteu quantes línies hi ha al fitxer / etc / passwd .
$ wc -l /etc/passwd
Ara cerqueu totes les aparicions del text on al fitxer / etc / passwd.
$ grep var /etc/passwd
Cerqueu quantes línies del fitxer contenen el text on

adherència -con/etc/passwd

Cerqueu quantes línies NO contenen el text on .

adherència -cvon/etc/passwd

Cerqueu l'entrada per al vostre inici de sessió a / etc / passwd dossier
grep kdm /etc/passwd

Exercici II

Mostra el fitxer gent i examinar-ne el contingut.
$ cat people
Cerqueu totes les línies que contenen la cadena Smith al fitxer gent .
$ grep 'Smith' people
Creeu un fitxer nou, n persones , que conté totes les línies que comencen per la cadena Personal al gent dossier
$ grep '^Personal' people> npeople
Confirmeu el contingut del fitxer n persones enumerant el fitxer.
$ cat npeople
Ara afegiu totes les línies on finalitza el text amb la cadena 500 al fitxer gent al fitxer n persones .
$ grep '500$' people>>npeople
De nou, confirmeu el contingut del fitxer n persones enumerant el fitxer.
$ cat npeople
Cerqueu l’adreça IP del servidor emmagatzemada al fitxer / etc / hosts .
$ grep $(hostname) /etc/hosts
Ús egrep per extreure del fitxer / etc / passwd fitxers que contenen les línies de compte lp o el vostre propi identificador d'usuari.
$ egrep '(lp|kdm:)' /etc/passwd

Exercici III

Cerqueu totes les línies que contenen els noms Evans o bé pintor al fitxer gent .
$ egrep 'Evans|Maler' people
Cerqueu totes les línies que contenen els noms Smith , Smyth o bé Smythe al fitxer gent .
$ egrep 'Sm(i|y)the?' people
Cerqueu totes les línies que contenen els noms Marró , Dibuixat o bé Font al fitxer gent.
$ egrep 'Brow?e?n' people
Cerqueu la línia que conté la cadena (administrador), inclosos els claudàtors al fitxer gent .

$egrep ' (Administrador )'gent

Cerqueu la línia que conté el caràcter * al fitxer gent.
$ egrep '*' people
Combineu el 5 i el 6 anterior per trobar ambdues expressions.

$egrep ' (Administrador ) | *'gent