howtos/Linux/grep.txt

71 lines
5.4 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.
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.
Básico:
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
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