Un script buscador

Hace unas semanas me inicié en la programación en GTK+, desde GNU/Linux con C++, y me surgió la necesidad de buscar en que headers estaban declaradas algunas constantes.

khronos@khronos-netbook:~$ ls /usr/include/gtk-2.0/gtk
gtkaboutdialog.h          
gtkhandlebox.h              
gtkscalebutton.h
gtkaccelgroup.h     
gtkhbbox.h                    
gtkscale.h
gtkaccellabel.h
...

Tengo algunas nociones de bash scripting, y sabía que el problema se podría resolver facilmente combinando el programa cat con grep.

khronos@khronos-netbook:/usr/include/gtk-2.0/gtk$ cat gtkwindow.h | grep GTK_WIN_POS_CENTER

Este comando buscaría la cadena "GTK_WIN_POS_CENTER" en el fichero gtkwindow.h. Ahora solo faltaba hacer esto en todos los archivos de la carpeta gtk/ para saber en que header estaba definido. Hacerlo uno a uno sería una ardua tarea, por lo que programé este pequeño script:

#!/bin/bash
if [ $# = 1 ]; then 
 for i in $( ls $PWD ); do  
  if [ -f "$PWD/$i" ]; then     
   if [ $(cat "$PWD/$i" | grep $1) != "" ]; then
    echo "Se encontró $1 en el fichero $i"   
   fi  
  fi 
 done
else
 echo "Error. Uso searchin [cadena]"
fi
Al final, el script me resultó muy útil, así que lo copié a la carpeta /bin para poder usarlo desde cualquier carpeta.

khronos@khronos-netbook:~/bash$ sudo cp searchin.sh /bin/searchin

Para probarlo, sólo hay que ejecutar "searchin" y la cadena a buscar.

khronos@khronos-netbook:~$ cd /usr/include/gtk-2.0/gtk
khronos@khronos-netbook:/usr/include/gtk-2.0/gtk$ searchin GTK_WIN_POS_CENTER
Se encontró GTK_WIN_POS_CENTER en el fichero gtkenums.h

Se le pueden añadir más funciones al script como búsqueda recursiva, incluir archivos ocultos, que no haga distinción de mayúsculas y minúsculas, etc.. Se puede jugar con los parámetros del comando ls y grep para añadirle más funcionalidades al script que se podrían pasar como parámetros.

0 Response to "Un script buscador"

Publicar un comentario