User Tools

Site Tools


terminal:grep

En Linux tenim eines molt potents que podem llançar des del Terminal i si volem trobar qualsevol text que estiga en el nostre equip usarem el comandament grep.

grep és un comandament que ens servirà per a trobar text dins de l'arxiu que li indiquem. El seu nom prové de g/re/p, un comandament que serveix per a alguna cosa semblança en un editor de textos d'Unix/Linux. Com molts altres comandaments, grep té moltes opcions disponibles que afegirem en forma de lletres i cadascuna servirà per a una tasca diferent. En combinar aquestes opcions serem capaces de realitzar cerques complexes en un o diversos arxius. A continuació t'ensenyem tot el que necessites saber.

Primer de tot explicarem les opcions disponibles:

  • –i: no diferenciarà entre majúscules i minúscules.
  • –w: força que només trobe paraules concretes.
  • –v: selecciona les línies que no coincideixen.
  • –n: mostra el número de la línia amb les paraules sol·licitades.
  • –h: elimina el prefix del nom de l'arxiu Unix en l'eixida.
  • –r: busca directoris recursivamente.
  • –R: com a -r però segueix tots els enllaços simbòlics.
  • –l: mostra només noms d'arxius amb les línies seleccionades.
  • –c: mostra només un compte per arxiu de les línies seleccionades.
  • –color: mostra els patrons coincidents en colors.

Buscar dins d'un arxiu de text

En aquesta imatge he buscat la paraula «Imatges» en l'arxiu «830.desktop» que està en aqueixa ruta. Com veieu, he escrit:

grep Imatges /home/pablinux/Documents/830.desktop
  

Cal tindre en compte que en aquest article escriurem exemples que cal modificar segons les nostres preferències de cerca. En dir «Arxiu», «Paraula», etc, ens estarem referint a l'arxiu amb la seua ruta. Si jo haguera escrit només «grep Imatges 830.desktop» hauria rebut un missatge dient que l'arxiu no existeix. O així seria llevat que l'arxiu estiguera en el directori arrel.

Altres exemples serien:

  • grep -i imatges /home/pablinux/Documents/830.desktop, on «imatges» seria la paraula que volem trobar i la resta l'arxiu amb la seua ruta. Aquest exemple buscaria «imatges» en l'arxiu «830.desktop» sense distingir entre majúscules i minúscules.
  • grep -R imatges: buscaria totes les línies d'un directori i tots els seus subdirectoris on es trobara la paraula «imatges».
  • grep -c exemple prova.txt: això ens buscaria i mostraria el total de vegades que «exemple» apareix en un arxiu anomenat «prova.txt.

Amb grep també podem buscar arxius

Si el que volem és trobar l'arxiu 830.desktop, escriurem el següent comandament:

grep 830.desktop
  

Això realitzarà una cerca de l'arxiu «830.desktop» en la nostra carpeta personal, és a dir, si l'arxiu es troba en la carpeta personal d'un altre usuari no la trobarà. Això és el més normal del món perquè un usuari no té permís per a accedir al contingut d'un altre sense la seua clau.

Com realitzar cerques recursives

grep també ens permet realitzar cerques subjectes a regles o pautes recurrents. Per exemple, llegir tots els arxius de cada directori que continguen la paraula «Pablinux». Per a això escriurem:

grep -r Pablinux /home/

O bé:

grep -R Pablinux /home/

Veurem els resultats de «Pablinux» en una línia separada precedida del nom de l'arxiu en el qual va ser trobat. Si no volem veure els noms de l'arxiu en l'eixida de dades usarem l'opció -h (de «hide»; amagar):

grep -h -R Pablinux /home/

Podem unir les opcions i escriure «-hR» sense les cometes.

Com realitzar cerques de paraules exactes

A vegades hi ha arxius que contenen el que volem buscar alguna cosa més. Per exemple, això ens pot passar en paraules compostes i buscant «boscos» podem trobar «guardaboscos». Si volem trobar una paraula exacta usarem l'opció -w:

grep -w boscos /home/pablinux/Documents/vacances.txt

L'anterior comandament buscaria «boscos», ignorant guardaboscos, en l'arxiu «vacances.txt» en la ruta indicada. Si el que volem és buscar dues paraules diferents usarem el comandament egrep:

egrep -w boscos|plantes /ruta/del/arxiu

Saber quantes vegades apareix una paraula en un arxiu

grep també és capaç de comptar quantes vegades apareix una paraula en un arxiu. Per a això usarem l'opció -c:

grep -c prova /ruta/al/arxiu

Afegint l'opció -n el que veurem és el número de la línia en la qual apareix la paraula.

Cerques inverses

També podem fer el contrari, és a dir, buscar les línies que no continguen una paraula. Per a això usarem l'opció -v, la qual cosa quedaria de la següent manera:

grep -v la ruta/al/arxiu

El comandament anterior mostraria totes les línies que no contingueren la paraula «la». Això pot vindre bé en documents o llistes en les quals una paraula es repetisca moltes vegades i, per alguna raó, necessitem accedir a la resta de línies.

Accedint a la informació del sistema amb grep

grep no sols és capaç de buscar dins d'arxius. També és capaç de mirar informació del sistema. Per a això podem usar el comandament:

cat /proc/cpuinfo | grep -i 'Model'

O bé:

grep -i 'Model' /proc/cpuinfo

Si el que volem és veure els noms de les unitats del disc escriurem:

dmesg | egrep '(s|h)d[a-z]'

Com llistar només els noms dels arxius que coincideixen

Si volem veure una llista amb només els noms dels arxius que coincideixen amb una cerca usarem l'opció -l com es mostra a continuació:

grep -l 'main' *.c

I si volem veure la paraula en colors escriurem:

grep --color paraula /ruta/al/arxiu

Com podeu veure, el comandament grep és una eina molt potent que val la pena sobretot en casos en els quals no recordem on hem escrit alguna cosa o en programació. A més, ens serveix per a esbrinar informació del sistema d'una manera que li agradarà als amants del Terminal.

Obra derivada de https://ubunlog.com/comando-grep/?utm_source=destacado-inside#Como_realizar_busquedas_recursivas

terminal/grep.txt · Última modificació el: 2023/02/16 18:00 per samgua