¿Quieres encontrar un fichero cuyo contenido sea un texto concreto?

Muñeco con Lupa

Algunos me han preguntado por una funcionalidad que tienen las últimas versiones de Microsoft Windows en las que puedes usar su buscador para encontrar, no solo ficheros con un nombre determinado, sino que también puedes incluir un texto para encontrar archivos que incluyan dicho texto, como pueden ser PDFs, documentos de Microsoft Office, ficheros de texto .txt, etc. Pues bien, debes saber que en tu distribución GNU/Linux puedes hacer eso y mucho más.

Ya hemos hecho pequeños tutoriales en LxA de comandos como find, whereis, locate, etc. Ahora te vamos a decir una forma de recrear esta funcionalidad de la que he hablado en el primer párrafo desde tu consola. Como digo Linux es extremadamente flexible y dispone de diversas herramientas para encontrar cosas, pues aquí te vamos a mostrar algunas de las diferentes formas que puedes usar para buscar ficheros en los que se encuentre un determinado texto o cadena: Para buscar una palabra o cadena en los ficheros de un directorio puedes usar:


grep -s hola /home/*

grep -R hola /home/*

grep -Rw hola /home/*

En el anterior ejemplo se buscaría la palabra “hola” dentro del directorio /home en todos los ficheros que existan. En el primera caso, con la opción -s se realiza una búsqueda no recursiva, mientras que con la -R se vuelve recursiva, por tanto si existen subdirectorios dentro también buscará ahí… Pero ojo, eso buscaría todo el contenido con esta cadena “hola”, por tanto si existe una frase o palabra tipo “holala” también la daría por válida y mostraría los ficheros que contienen esto, es decir, no busca esa palabra de una forma específica. Para hacerla específica puedes usar la tercera opción.

Recuerda que hará búsquedas sensibles a mayúsculas y minúsculas, por tanto en los ejemplos anteriores se ignorarían cosas como Hola, HOLA, holA, etc. Para que haga una búsqueda e ignore mayúsculas y minúsculas, entonces puedes usar la opción -i.

Imagina que quieres hacer una búsqueda a la inversa, es decir, todos aquellos ficheros donde no se incluya una cadena o palabra específica. ¿Podrías? La verdad es que sí, por ejemplo:


grep -Rlv hola /home/*

grep --exclude-dir= /home/Desktop -Rlv /home/*

En el primer ejemplo mostrará toda la lista de ficheros que no contienen la palabra “hola”, mientras que en el segundo caso haría lo mismo pero se excluyen los ficheros que se encuentren alojados en /home/Desktop… Por cierto, esta opción –exclude-dir= también la puedes usar en los primeros ejemplos…

 


Un comentario

  1.   Tiago Vigo dijo

    Grazas por isto.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *