20 exemples útils d'ordres egrep a Linux


Breu: en aquesta guia, parlarem d'alguns dels exemples pràctics de l'ordre egrep. Després de seguir aquesta guia, els usuaris podran fer cerques de text de manera més eficient a Linux.

Alguna vegada t'has sentit frustrat perquè no pots trobar la informació necessària als registres? L'extracció de la informació necessària d'un conjunt de dades gran és una tasca complexa i que requereix temps.

Les coses es tornen realment difícils si el sistema operatiu no ofereix les eines adequades i aquí arriba Linux per rescatar-vos. Linux ofereix diverses utilitats de filtratge de text com ara sed, cut, etc.

Tanmateix, egrep és una de les utilitats més potents i utilitzades habitualment per al processament de text a Linux, i parlarem d'alguns exemples de l'ordre egrep.

L'ordre egrep a Linux és reconeguda per la família de l'ordre grep, que s'utilitza per cercar i fer coincidir un patró particular als fitxers. Funciona de manera similar a grep -E (grep Extended regex), però principalment cerca un fitxer determinat o fins i tot línies per alinear o imprimeix la línia al fitxer donat.

La sintaxi de l'ordre egrep és la següent:

$ egrep [OPTIONS] PATTERNS [FILES]

Creem un fitxer de text de mostra amb el contingut següent per utilitzar un exemple:

$ cat sample.txt

Aquí, podem veure que el fitxer de text està preparat. Ara analitzem alguns exemples comuns que es poden utilitzar diàriament.

Comencem amb un exemple senzill de concordança de patrons, on podem utilitzar l'ordre següent per cercar una cadena professional en un fitxer sample.txt:

$ egrep professionals sample.txt

Aquí, podem veure que l'ordre imprimeix la línia que conté el patró especificat.

Podem fer que la sortida sigui més informativa ressaltant el patró coincident. Per aconseguir-ho, podem utilitzar l'opció --color de l'ordre egrep. Per exemple, l'ordre següent ressaltarà el text professionals en color vermell:

$ egrep --color=auto professionals sample.txt

Aquí, podem veure que la mateixa sortida és més informativa en comparació amb l'anterior. A més, podem identificar fàcilment que la paraula professionals es repeteix dues vegades.

A la majoria de sistemes Linux, la configuració anterior està activada per defecte mitjançant l'àlies següent:

$ alias egrep='egrep –color=auto'

L'ordre egrep accepta diversos fitxers com a argument, la qual cosa ens permet cercar un patró determinat en diversos fitxers. Entenem-ho amb un exemple.

Primer, creeu una còpia del fitxer sample.txt:

$ cp sample.txt sample-copy.txt

Ara, cerqueu el patró professionals als dos fitxers:

$ egrep professionals sample.txt sample-copy.txt 

A l'exemple anterior, podem veure el nom del fitxer a la sortida, que representa la línia coincident d'aquest fitxer.

De vegades només necessitem esbrinar si el patró està present o no al fitxer. En cas afirmatiu, en quantes línies hi ha el present? En aquests casos, podem utilitzar l'opció -c de l'ordre.

Per exemple, l'ordre següent mostrarà 1 com a sortida perquè la paraula professionals només està present en una línia.

$ egrep -c professionals sample.txt

1

A l'exemple anterior, vam veure que l'opció -c no compta el nombre d'ocurrències del patró. Per exemple, la paraula professionals apareix dues vegades a la mateixa línia, però l'opció -c només la tracta com una coincidència única.

En aquests casos, podem utilitzar l'opció -o de l'ordre per imprimir només el patró coincident. Per exemple, l'ordre següent mostrarà la paraula professionals en dues línies separades:

$ egrep -o professionals sample.txt

Ara, anem a comptar les línies amb l'ordre wc:

$ egrep -o professionals sample.txt | wc -l

A l'exemple anterior, hem utilitzat la combinació d'ordres egrep i wc per comptar el nombre d'ocurrències del patró particular.

De manera predeterminada, egrep realitza la concordança de patrons de manera que distingeix entre majúscules i minúscules. Significa paraules: nosaltres, Nosaltres, nosaltres i NOSALTRES són tractats com a paraules diferents. Tanmateix, podem aplicar la cerca que no distingeix entre majúscules i minúscules mitjançant l'opció -i.

Per exemple, a la concordança del patró d'ordres a continuació es farà correctament per al text we i We:

$ egrep -i we sample.txt 

A l'exemple anterior, vam veure que l'ordre egrep realitza una coincidència parcial. Per exemple, quan vam cercar el text nosaltres, la concordança de patrons també va tenir èxit per a altres textos. Com ara web, lloc web i eren.

Per superar aquesta limitació, podem utilitzar l'opció -w, que imposa tota la concordança de paraules.

$ egrep -w we sample.txt

Fins ara, hem utilitzat l'ordre egrep per imprimir les línies en què hi ha el patró donat. Tanmateix, de vegades volem realitzar l'operació de manera contrària.

Per exemple, potser volem imprimir les línies en què el patró donat no està present. Ho podem aconseguir amb l'ajuda de l'opció -v:

$ egrep -v we sample.txt

Aquí, podem veure que l'ordre imprimeix tota la línia que no conté el text we.

Podem utilitzar l'opció -n de l'ordre per habilitar la numeració de línies, que mostra el número de línia a la sortida quan la concordança de patrons té èxit. Aquest senzill truc fa que la sortida sigui més significativa.

$ egrep -n professionals sample.txt

A la sortida anterior, podem veure que la paraula professionals està present a la cinquena línia.

En mode silenciós, l'ordre egrep no imprimeix el patró coincident. Per tant, hem d'utilitzar el valor de retorn de l'ordre per identificar si la concordança de patrons ha tingut èxit o no.

Podem utilitzar l'opció -q de l'ordre per habilitar el mode silenciós, que és útil mentre escriu scripts d'intèrpret d'ordres.

$ egrep -q professionals sample.txt
$ egrep -q non-existing-pattern sample.txt

En aquest exemple, el valor de retorn zero indica la presència del patró mentre que el valor diferent de zero indica l'absència del patró.

De vegades, té sentit mostrar unes quantes línies al voltant del patró coincident. Per a aquests escenaris, podem utilitzar l'opció -B de l'ordre, que mostra N línies abans del patró coincident.

Per exemple, l'ordre següent imprimirà la línia per a la qual la coincidència del patró té èxit, així com 2 línies abans.

$ egrep -B 2 -n professionals sample.txt 

En aquest exemple, hem utilitzat l'opció -n per mostrar números de línia.

D'una manera similar, podem utilitzar l'opció -A de l'ordre per mostrar línies després de la coincidència del patró. Per exemple, l'ordre següent imprimirà la línia per a la qual la coincidència del patró té èxit, així com les 2 línies següents.

$ egrep -A 2 -n professionals sample.txt

A més d'això, l'ordre egrep admet l'opció -C que combina la funcionalitat de les opcions -A i -B, que mostra la línies abans i després del patró coincident.

$ egrep -C 2 -n professionals sample.txt 

Com s'ha comentat anteriorment, podem realitzar una concordança de patrons en diversos fitxers. Tanmateix, la situació es torna complicada quan els fitxers estan presents a diversos subdirectoris i els passem tots com a arguments d'ordre.

En aquests casos, podem fer la concordança de patrons de manera recursiva utilitzant l'opció -r tal com es mostra a l'exemple següent.

Primer, creeu 2 subdirectoris i copieu-hi el fitxer sample.txt:

$ mkdir -p dir1/dir2
$ cp sample.txt dir1/
$ cp sample.txt dir1/dir2/

Ara, anem a realitzar l'operació de cerca d'una manera recursiva:

$ egrep -r professionals dir1

A l'exemple anterior, podem veure que la coincidència del patró ha estat correcta per als fitxers dir1/dir2/sample.txt i dir1/sample.txt.

Podem utilitzar un caràcter de punt (.) per fer coincidir qualsevol caràcter, excepte el final de la línia. Per exemple, l'expressió regular següent coincideix amb el text har, hat i té:

$ egrep "ha." sample.txt

Podem utilitzar l'asterisc (*) per fer coincidir zero o més ocurrències del caràcter anterior. Per exemple, l'expressió regular següent coincideix amb el text que conté una cadena we seguida de zero o més aparicions del caràcter b.

$ egrep "web*" sample.txt

Podem utilitzar el signe més (+) per fer coincidir una o més ocurrències del caràcter anterior. Per exemple, l'expressió regular següent coincideix amb el text que conté la cadena we seguida d'almenys una ocurrència del caràcter b.

$ egrep "web+" sample.txt

Aquí, podem veure que la concordança de patrons no té èxit per a les paraules: nosaltres i èrem, a causa de l'absència del caràcter b.

Podem utilitzar el cursor (^) per representar l'inici de la línia. Per exemple, l'expressió regular següent imprimeix les línies que comencen amb el text Nosaltres:

$ egrep "^We" sample.txt

Podem utilitzar el dòlar ($) per representar el final de la línia. Per exemple, l'expressió regular següent imprimeix les línies que acaben amb el text e.:

$ egrep "e.$" sample.txt

Podem utilitzar el cursor (^) seguit immediatament del dòlar ($) per representar la línia buida. Utilitzem això en una expressió regular per eliminar línies buides:

$ egrep -n -v "^$" sample.txt

A la sortida anterior, podem veure que els números de línia 2, 4, 6, 8 i 10 no es mostren ja que estan buits.

En aquest article, hem comentat alguns exemples útils de les ordres egrep. Es poden utilitzar aquests exemples en el dia a dia per millorar la productivitat.

Coneixeu algun altre millor exemple de l'ordre egrep a Linux? Feu-nos saber les vostres opinions als comentaris a continuació.