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
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?
Hola!
Cuando dices que Grep también sirve para buscar archivos no creo que sea correcto ya que si ejecutas grep EXPRESION y no le pasas el fichero, esperará la entrada de datos de la entrada standard.
Según la página del manual:
grep searches the named input FILEs for lines containing a match to the given PATTERN. If no files are specified, or if the file “-” is given, grep searches standard input.
Por eso puedes usarlo en pipelines, como el que parseas la salida de /proc/cpuinfo al pasar la salida de este comando como entrada de grep puedes hacer la búsqueda.
Un saludo
Muy buen post.
Lo explicas muy bien y vas directo la grano.