Sábado, Abril 20, 2019

Comando grep: potente herramienta para encontrar texto desde el Terminal

grep

Casi cualquier usuario que tenga ordenador o que trabaje con uno conocerá el atajo del teclado Ctrl+F para encontrar texto. La “F” viene de “Find”, “encontrar” en inglés, y puede servirnos, por ejemplo, para encontrar texto en una página web. Este atajo está disponible también en muchas aplicaciones, habiendo programas que usan la “B” de “Buscar, pero estos atajos sólo funcionan si estamos dentro de la aplicación y con el archivo abierto. En Linux tenemos herramientas muy potentes que podemos lanzar desde el Terminal y si queremos encontrar cualquier texto que esté en nuestro equipo usaremos el comando grep.

grep es un comando que nos servirá para encontrar texto dentro del archivo que le indiquemos. Su nombre proviene de g/re/p, un comando que sirve para algo parecido en un editor de textos de Unix/Linux. Como otros muchos comandos, grep tiene muchas opciones disponibles que añadiremos en forma de letras y cada una servirá para una tarea diferente. Al combinar estas opciones seremos capaces de realizar búsquedas complejas en uno o varios archivos. A continuación te enseñamos todo lo que necesitas saber.

con grep encontraremos cualquier texto en cualquier archivo

Antes que nada explicaremos las opciones disponibles:

  • i: no diferenciará entre mayúsculas y minúsculas.
  • w: fuerza que sólo encuentre palabras concretas.
  • v: selecciona las líneas que no coinciden.
  • n: muestra el número de la línea con las palabras de solicitadas.
  • h: elimina el prefijo del nombre del archivo Unix en la salida.
  • r: busca directorios recursivamente.
  • R: como -r pero sigue todos los enlaces simbólicos.
  • l: muestra sólo nombres de archivos con las líneas seleccionadas.
  • c: muestra sólo una cuenta por archivo de las líneas seleccionadas.
  • –color: muestra los patrones coincidentes en colores.

En la imagen que tenéis encabezando este artículo he buscado la palabra “Imágenes” en el archivo “830.desktop” que está en esa ruta. Como veis, he escrito:

grep Imágenes /home/pablinux/Documentos/830.desktop

Hay que tener en cuenta que en este artículo escribiremos ejemplos que hay que modificar según nuestras preferencias de búsqueda. Al decir “Archivo”, “Palabra”, etc, nos estaremos refiriendo al archivo con su ruta. Si yo hubiera escrito solo “grep Imágenes 830.desktop” habría recibido un mensaje diciendo que el archivo no existe. O así sería a no ser que el archivo estuviera en el directorio raíz.

Otros ejemplos serían:

  • grep -i imágenes /home/pablinux/Documentos/830.desktop, donde “imágenes” sería la palabra que queremos encontrar y el resto el archivo con su ruta. Este ejemplo buscaría “imágenes” en el archivo “830.desktop” sin distinguir entre mayúsculas y minúsculas.
  • grep -R imágenes: buscaría todas las líneas de un directorio y todos sus subdirectorios donde se encontrara la palabra “imágenes”.
  • grep -c ejemplo prueba.txt: esto nos buscaría y mostraría el total de veces que “ejemplo” aparece en un archivo llamado “prueba.txt.

Con grep también podemos buscar archivos

Si lo que queremos es encontrar el archivo 830.desktop, escribiremos el siguiente comando:

grep 830.desktop

Esto realizará una búsqueda del archivo “830.desktop” en nuestra carpeta personal, es decir, si el archivo se encuentra en la carpeta personal de otro usuario no la encontrará. Esto es lo más normal del mundo porque un usuario no tiene permiso para acceder al contenido de otro sin su clave.

Cómo realizar búsquedas recursivas

grep también nos permite realizar búsquedas sujetas a reglas o pautas recurrentes. Por ejemplo, leer todos los archivos de cada directorio que contengan la palabra “Pablinux”. Para ello escribiremos:

grep -r Pablinux /home/

O bien:

grep -R Pablinux /home/

Veremos los resultados de “Pablinux” en una linea separada precedida del nombre del archivo en el que fue encontrado. Si no queremos ver los nombres del archivo en la salida de datos usaremos la opción -h (de “hide”; esconder):

grep -h -R Pablinux /home/

Podemos unir las opciones y escribir “-hR” sin las comillas.

Cómo realizar búsquedas de palabras exactas

A veces hay archivos que contienen lo que queremos buscar algo más. Por ejemplo, esto nos puede pasar en palabras compuestas y buscando “bosques” podemos encontrar “guardabosques”. Si queremos encontrar una palabra exacta usaremos la opción -w:

grep -w bosques /home/pablinux/Documentos/vacaciones.txt

El anterior comando buscaría “bosques”, ignorando guardabosques, en el archivo “vacaciones.txt” en la ruta indicada. Si lo que queremos es buscar dos palabras diferentes usaremos el comando egrep:

egrep -w bosques|plantas /ruta/del/archivo

Saber cuántas veces aparece una palabra en un archivo

grep también es capaz de contar cuántas veces aparece una palabra en un archivo. Para ello usaremos la opción -c:

grep -c prueba /ruta/al/archivo

Añadiendo la opción -n lo que veremos es el número de la línea en la que aparece la palabra.

Búsquedas inversas

También podemos hacer lo contrario, es decir, buscar las líneas que no contengan una palabra. Para ello usaremos la opción -v, lo que quedaría de la siguiente manera:

grep -v la ruta/al/archivo

El comando anterior mostraría todas las lineas que no contuvieran la palabra “la”. Esto puede venir bien en documentos o listas en las que una palabra se repita muchas veces y, por alguna razón, necesitemos acceder al resto de líneas.

Accediendo a la información del sistema con grep

modelo-del-pc-con-grep

grep no solo es capaz de buscar dentro de archivos. También es capaz de mirar información del sistema. En la captura anterior podemos ver cómo nos muestra qué modelo de PC tenemos (ya sé que no es el portátil más potente del mundo). Para ello hemos usado el comando:

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

O bien:

grep -i 'Model' /proc/cpuinfo

Si lo que queremos es ver los nombres de las unidades del disco escribiremos:

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

Cómo listar sólo los nombres de los archivos que coinciden

Si queremos ver una lista con sólo los nombres de los archivos que coinciden con una búsqueda usaremos la opción -l como se muestra a continuación:

grep -l 'main' *.c

Y si queremos ver la palabra en colores escribiremos:

grep --color palabra /ruta/al/archivo

Como podéis ver, el comando grep es una herramienta muy potente que merece la pena sobre todo en casos en los que no recordamos dónde hemos escrito algo o en programación. Además, nos sirve para averiguar información del sistema de una manera que le gustará a los amantes del Terminal. ¿Te ha sido útil esta guía sobre el comando para encontrar textos grep?

 

Fuente: ubunlog

Compártelo. ¡Gracias!

 
Grupo Digital de Ayuda! Laboratorio Linux! - Linux para todos.

¿Quién está en línea?

Hay 216 invitados y ningún miembro en línea

Contador de Visitas

9676674
Hoy Hoy 486
Ayer Ayer 2122
Esta semana Esta semana 9883
Este mes Este mes 35150
Total de Visitas Total de Visitas 9676674

Día con más
visitantes

03-20-2019 : 2228

Gracias por su visita