Exemples d'usos del comandament grep de Linux

Introducció

La comanda grep de Linux s'utilitza com a mètode per filtrar l'entrada.

GREP significa "Global Regular Expression Printer" i, per tant, per poder utilitzar-lo de manera eficaç, hauria de tenir cert coneixement sobre expressions regulars.

En aquest article, us mostraré alguns exemples que us ajudaran a entendre l'ordre grep.

01 de 09

Com cercar una cadena en un fitxer amb GREP

El comandament grep de Linux.

Imagineu que teniu un fitxer de text anomenat llibres amb els següents títols de llibres infantils:

Per trobar tots els llibres amb la paraula "El" en el títol, utilitzaria la següent sintaxi:

grep Els llibres

Es retornaran els següents resultats:

En cada cas, es ressaltarà la paraula "El".

Tingueu en compte que la cerca es distingeix entre majúscules i minúscules, de manera que si un dels títols tingués "el" en comptes de "El", no seria retornat.

Per ignorar el cas, podeu afegir el següent interruptor:

grep els llibres - ignore-case

També podeu utilitzar el botó -i de la manera següent:

grep -i els llibres

02 de 09

Cerca una cadena en un fitxer amb comodins

El comandament grep és molt poderós. Podeu utilitzar una multitud de tècniques de concordança de patrons per filtrar els resultats.

En aquest exemple, us mostraré com cercar una cadena en un fitxer amb comodins .

Imagineu que teniu un fitxer anomenat llocs amb els següents noms de llocs escocesos:

aberdeen

aberystwyth

aberlour

inverurie

inverness

Newburgh

nou cérvol

nou galloway

Glasgow

edinburgh

Si voleu cercar tots els llocs amb el nom del vostre nom, useu la sintaxi següent:

llocs grep inver *

L'asterisc (*) comodí significa 0 o molts. Per tant, si teniu un lloc anomenat Inver o un lloc anomenat Inverness, els dos serien retornats.

Un altre comodí que podeu utilitzar és el període (.). Podeu utilitzar-lo per coincidir amb una sola lletra.

llocs grep inver.r

L'ordre anterior trobaria llocs anomenats inverurie i inverary, però no trobaria la inversió, ja que només hi pot haver un comodí entre les dues r que es denota en un sol període.

El comodí d'època és útil, però pot causar problemes si teniu una com a part del text que esteu cercant.

Per exemple, mireu aquesta llista de noms de domini

Per trobar tots els about.coms, només podeu cercar utilitzant la següent sintaxi:

grep * about * domainnames

L'ordre anterior es reduiria si la llista contingués el següent nom:

Per tant, podeu provar la següent sintaxi:

grep * about.com noms de domini

Això funcionaria bé si no hi havia un domini amb el següent nom:

aboutycom.com

Per cercar realment el terme about.com, hauríeu d'escapar del punt de la següent manera:

grep * sobre noms de domini .com

El comodí final per mostrar-vos és el signe d'interrogació que representa zero o un caràcter.

Per exemple:

noms de noms de grep?

L'ordre anterior tornaria a aberdeen, aberystwyth o fins i tot berwick.

03 de 09

Cercar cadenes al principi i al final de la línia utilitzant grep

El símbol quilat (^) i el dòlar ($) us permeten cercar patrons al principi i al final de les línies.

Imagineu que teniu un fitxer anomenat futbol amb els següents noms d'equip:

Si volgués trobar tots els equips que van començar amb Manchester, utilitzaria la sintaxi següent:

grep ^ equips de Manchester

L'ordre anterior tornaria Manchester City i Manchester United però no FC United Of Manchester.

També podeu trobar tots els equips que acaben amb United utilitzant la següent sintaxi:

equips grep United $

L'ordre anterior tornaria Manchester United i Newcastle United però no FC United Of Manchester.

04 de 09

Comptant el nombre de coincidències utilitzant grep

Si no voleu tornar les línies reals que coincideixen amb un patró utilitzant grep, però només voleu saber quants hi ha, podeu utilitzar la següent sintaxi:

grec -c model de fitxer d'entrada

Si el patró coincideix dues vegades, es retornaria el número 2.

05 de 09

Trobar tots els termes que no coincideixen amb grep

Imagineu que teniu una llista de noms de llocs amb els països que es detallen de la manera següent:

Heu notat que la badia de Colwyn no té cap país associat.

Per cercar tots els llocs amb un país, podeu utilitzar la següent sintaxi:

grep land $ places

Els resultats retornats serien tots els llocs, excepte per a la badia de Colwyn.

Això, òbviament, només funciona per llocs que acaben en terrenys (amb prou feines científics).

Podeu invertir la selecció mitjançant la sintaxi següent:

grep -v terra $ llocs

Això trobaria tots els llocs que no acabaven amb la terra.

06 de 09

Com trobar línies buides en fitxers amb grep

Imagineu que teniu un fitxer d'entrada que utilitza una aplicació de tercers que deixa de llegir el fitxer quan troba una línia buida de la manera següent:

Quan l'aplicació arribi a la línia després de Liverpool, deixarà de llegir el que significa que la badia de Colwyn es perd totalment.

Podeu utilitzar grep per buscar línies en blanc amb la següent sintaxi:

grep ^ $ places

Lamentablement, això no és especialment útil perquè només torna les línies en blanc.

Per descomptat, podria obtenir un recompte de la quantitat de línies en blanc com a comprovació per veure si el fitxer és vàlid de la següent manera:

Grep -c ^ $ places

Tanmateix, seria més útil conèixer els números de línia que tinguin una línia en blanc perquè pugui reemplaçar-los. Podeu fer-ho amb el següent comandament:

grep -n ^ $ places

07 de 09

Com cercar cadenes de majúscules o minúscules utilitzant grep

Mitjançant grep podeu determinar quines línies d'un fitxer tenen caràcters en majúscules amb la següent sintaxi:

grep '[AZ]' nom del fitxer

Els claudàtors [] us permeten determinar l'interval de caràcters. En l'exemple anterior, coincideix amb qualsevol caràcter que es trobi entre A i Z.

Per tant, per a que coincideixi amb els caràcters en minúscules, podeu utilitzar la següent sintaxi:

grep '[az]' nom del fitxer

Si voleu unir només lletres i no números o altres símbols, podeu utilitzar la sintaxi següent:

grep '[a-zA-Z]' nom del fitxer

Podeu fer el mateix amb els nombres de la següent manera:

grep '[0-9]' nom del fitxer

08 de 09

S'està cercant patrons repetitius usant grep

Podeu utilitzar claudàtors ({} per a cercar un patró repetitiu.

Imagineu que teniu un fitxer amb números de telèfon de la següent manera:

Ja sabeu que la primera part del número ha de ser de tres dígits i voleu trobar les línies que no coincideixin amb aquest patró.

Des de l'exemple anterior, saps que [0-9] retorna tots els números d'un fitxer.

En aquest cas volem que les línies que comencin amb tres números seguits d'un guió (-). Podeu fer-ho amb la següent sintaxi:

grep "^ [0-9] [0-9] [0-9] -" números

Com sabem amb exemples anteriors, el quilat (^) vol dir que la línia ha de començar amb el següent patró.

El [0-9] buscarà qualsevol número entre 0 i 9. Com que això s'inclou tres vegades coincideix amb 3 números. Finalment, hi ha un guió per indicar que un guió ha de tenir èxit en els tres nombres.

Si utilitzeu els claudàtors encaixos, podeu fer que la cerca sigui més petita de la següent manera:

grep "^ [0-9] \ {3 \} -" números

La barra inclinada escapa {parèntesi perquè funcioni com a part de l'expressió regular, però, en essència, el que diu és [0-9] {3}, que significa qualsevol número entre 0 i 9 tres vegades.

Els claudàtors també es poden utilitzar de la següent manera:

{5,10}

{5,}

El {5,10} significa que el caràcter que es busca s'ha de repetir com a mínim 5 vegades, però no més de 10, mentre que el {5,} significa que el caràcter s'ha de repetir almenys 5 vegades, però pot ser més que això.

09 de 09

Ús de la sortida d'altres comandaments mitjançant grep

Fins aquí hem observat la concordança de patrons en els fitxers individuals, però Grep pot utilitzar la sortida d'altres ordres com a entrada per a la concordança de patrons.

Un bon exemple d'això és l'ús de la comanda ps que enumera els processos actius.

Per exemple, executeu l'ordre següent:

ps-ef

Es mostraran tots els processos en execució del vostre sistema.

Podeu utilitzar grep per cercar un procés en execució determinat de la manera següent:

ps -ef | grep firefox

Resum

La comanda grep és un comandament fonamental per a Linux i és un que val la pena aprendre, ja que farà que la vostra vida sigui molt més fàcil en cercar fitxers i processos quan feu servir el terminal.