12 exemples pràctics de l'ordre grep de Linux


Alguna vegada t'has enfrontat a la tasca de buscar una cadena o patró en particular en un fitxer, però no tens ni idea d'on començar a buscar? Bé, doncs, aquí teniu el grep al rescat!

grep és un potent cercador de patrons de fitxers que ve equipat a totes les distribucions de Linux. Si, per qualsevol motiu, no està instal·lat al vostre sistema, podeu instal·lar-lo fàcilment mitjançant el vostre gestor de paquets (apt-get a Debian/Ubuntu i yum a RHEL/CentOS/Fedora).

$ sudo apt-get install grep         #Debian/Ubuntu
$ sudo yum install grep             #RHEL/CentOS/Fedora

He trobat que la manera més fàcil de mullar-se els peus amb grep és submergir-se i utilitzar alguns exemples del món real.

1. Cerca i cerca fitxers

Suposem que acabeu d'instal·lar una còpia nova del nou Ubuntu a la vostra màquina i que donareu una oportunitat a l'script Python. Heu estat recorrent el web buscant tutorials, però veieu que hi ha dues versions diferents de Python en ús i no sabeu quina va ser instal·lada al vostre sistema per l'instal·lador d'Ubuntu, ni si va instal·lar algun mòdul. Simplement executeu aquesta comanda:

# dpkg -l | grep -i python
ii  python2.7                        2.7.3-0ubuntu3.4                    Interactive high-level object-oriented language (version 2.7)
ii  python2.7-minimal                2.7.3-0ubuntu3.4                    Minimal subset of the Python language (version 2.7)
ii  python-openssl                   0.12-1ubuntu2.1                     Python wrapper around the OpenSSL library
ii  python-pam                       0.4.2-12.2ubuntu4                   A Python interface to the PAM library

Primer, vam executar dpkg –l, que enumera els paquets *.deb instal·lats al vostre sistema. En segon lloc, vam canalitzar aquesta sortida a grep –i python, que de manera senzilla indica anar a grep i filtrar i tornar-ho tot amb 'python'. L'opció –i està allà per ignorar les majúscules i minúscules, ja que grep distingeix entre majúscules i minúscules. Utilitzar l'opció –i és un bon hàbit d'entrar, tret que, per descomptat, intenteu fer una cerca més específica.

2. Cerca i filtra fitxers

El grep també es pot utilitzar per cercar i filtrar fitxers individuals o diversos fitxers. Prenem aquest escenari:

Teniu problemes amb el vostre servidor web Apache i us heu posat en contacte amb un dels molts fòrums fantàstics de la xarxa per demanar ajuda. L'ànima amable que us respon us ha demanat que publiqueu el contingut del vostre fitxer /etc/apache2/sites-available/default-ssl. No seria més fàcil per a tu, l'home que t'ajuda i tots els que el llegeixen, si poguessis eliminar totes les línies comentades? Doncs pots! Només has d'executar això:

# grep –v “#”  /etc/apache2/sites-available/default-ssl

L'opció –v diu a grep que inverteixi la seva sortida, és a dir, que en lloc d'imprimir línies coincidents, feu el contrari i imprimiu totes les línies que no coincideixin amb l'expressió, en aquest cas, les # línies comentades.

3. Cerqueu només tots els fitxers .mp3

El grep pot ser molt útil per filtrar des de stdout. Per exemple, suposem que teniu una carpeta sencera plena de fitxers de música en un munt de formats diferents. Voleu trobar tots els fitxers *.mp3 de l'artista JayZ, però no voleu cap de les pistes remezclades. L'ús d'una comanda find amb un parell de canonades grep farà el truc:

# find . –name “*.mp3” | grep –i JayZ | grep –vi “remix”

En aquest exemple, estem fent servir find per imprimir tots els fitxers amb una extensió *.mp3, canalitzar-lo a grep –i per filtrar i imprimir tots els fitxers amb el nom \JayZ i després un altre tub a grep –vi que filtra i no imprimeix tots els noms de fitxer amb la cadena (en cap cas) \remix.

4. Mostra el nombre de línies abans o després de la cadena de cerca

Un altre parell d'opcions són els interruptors –A i –B, que mostra la línia coincident i el nombre de línies que vénen abans o després de la cadena de cerca. Tot i que la pàgina de manual ofereix una explicació més detallada, em sembla més fàcil recordar les opcions com –A = després i –B = abans:

# ifconfig | grep –A 4 eth0
# ifconfig | grep  -B 2 UP

5. Imprimeix el nombre de línies al voltant de la coincidència

L'opció -C del grep és similar, però en lloc d'imprimir les línies que vénen abans o després de la cadena, imprimeix les línies en qualsevol direcció:

# ifconfig | grep –C 2 lo

6. Comptar el nombre de partits

De manera similar a la canalització d'una cadena grep al recompte de paraules (programa wc), l'opció integrada de grep us pot fer el mateix:

# ifconfig | grep –c inet6

7. Cerca fitxers per una cadena donada

L'opció –n per a grep és molt útil quan es depuren fitxers durant errors de compilació. Mostra el número de línia al fitxer de la cadena de cerca donada:

# grep –n “main” setup..py

8. Cerca una cadena de manera recursiva a tots els directoris

Si voleu cercar una cadena al directori actual juntament amb tots els subdirectoris, podeu especificar l'opció –r per cercar recursivament:

# grep –r “function” *

9. Cerca tot el patró

Passar l'opció –w a grep cerca tot el patró que hi ha a la cadena. Per exemple, utilitzant:

# ifconfig | grep –w “RUNNING”

Imprimeix la línia que conté el patró entre cometes. D'altra banda, si ho proveu:

# ifconfig | grep –w “RUN”

No es retornarà res, ja que no busquem un patró, sinó una paraula sencera.

10. Cerqueu una cadena a Fitxers comprimits Gzipped

Els derivats de grep mereixen alguna menció. El primer és zgrep, que, semblant a zcat, s'utilitza en fitxers comprimits amb gzip. Pren les mateixes opcions que grep i s'utilitza de la mateixa manera:

# zgrep –i error /var/log/syslog.2.gz

11. Relaciona l'expressió regular en fitxers

L'egrep és un altre derivat que significa \Extended Global Regular Expression. Reconeix metacaracters d'expressió addicionals com + ? | i().

egrep és molt útil per cercar fitxers font i altres fragments de codi, si és necessari. Es pot invocar des del grep normal especificant l'opció –E.

# grep –E

12. Cerca una cadena de patró fix

El fgrep cerca en un fitxer o llista de fitxers una cadena de patró fixa. És el mateix que grep –F. Una manera habitual d'utilitzar fgrep és passar-li un fitxer de patrons:

# fgrep –f file_full_of_patterns.txt file_to_search.txt

Aquest és només un punt de partida amb grep, però com probablement podreu veure, és molt valuós per a diversos propòsits. A part de les ordres simples d'una línia que hem implementat, grep es pot utilitzar per escriure treballs cron potents i scripts d'intèrpret d'ordres robusts, per començar.

Sigues creatiu, experimenta amb les opcions de la pàgina de manual i crea expressions grep que serveixin per als teus propis propòsits!