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
Imagineu que teniu un fitxer de text anomenat llibres amb els següents títols de llibres infantils:
- Robin Hood
- Caputxeta vermella
- Peter Pan
- Goldilocks i els tres ossos
- Blancaneus i els set nans
- Pinnochio
- El gat al barret
- Els tres porquets
- El Gruffalo
- Charlie i la fàbrica de xocolata
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:
- Goldilocks i els tres ossos
- Blancaneus i els set nans
- El gat al barret
- Els tres porquets
- El Gruffalo
- Charlie i la fàbrica de xocolata
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
- linux.about.com
- pcsupport.about.com
- mp3.about.com
- minecraft.about.com
- androidgames.about.com
- netforbeginners.about.com
- dailylinuxuser.com
- google.co.uk
- google.au
- direct.gov.uk
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:
- dailylinuxuser.com/about.html
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:
- Blackpool
- Liverpool
- Manchester City
- Ciutat de Leicester
- Manchester United
- Newcastle United
- FC United of Manchester
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:
- aberdeen escocia
- glasgow escocia
- liverpool inglaterra
- badia de Colwyn
- Londres, Anglaterra
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:
- aberdeen escocia
- inverness escocia
- liverpool inglaterra
- vals de la badia de Colwyn
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:
- 055-1234
- 055-4567
- 555-1545
- 444-0167
- 444-0854
- 4549-2234
- x44-1234
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