Buscar contenido de archivos en Emacs con el comando grep
De un tiempo a esta parte se han puesto de moda los llamados «escritorios semánticos», donde podemos buscar contenido en todos nuestros archivos de una forma instantánea. De hecho, basta con pulsar un atajo de teclado, comenzar a escribir y ya casi al momento el sistema nos comienza a arrojar resultados. Claro que toda esta magia lleva su lado oscuro, pues se necesita tener el contenido disponible indexado en una base de datos, además de actualizarlo convenientemente cada vez que haya un añadido, modificación, supresión, etc. Tal labor de vigilancia reside en un proceso que se ejecuta en segundo plano y que tiende a consumir recursos y memoria, muchas veces de forma absurda e innecesaria, como es el caso del indexador Baloo en el escritorio Plasma. Soy un feliz y entusiasta usuario de Plasma, pero me temo que el bueno de Baloo no se cuenta entre las muchas bondades del escritorio que nos regala la comunidad KDE. No puedo con Baloo. Por mucho que lo limito, por mucho que lo procuro mantener a raya, siempre hay un momento (y generalmente el más inoportuno) en que se desmadra y se vuelve loco. Así que fuera Baloo: desactivado siempre.
Bien, matamos a Baloo, ganamos en salud; pero entonces, ¿nos quedamos también sin nuestra bonita búsqueda semántica? En
realidad yo apenas echo mano de ella, y si alguna vez necesito buscar cierto contenido en mis archivos, me doy cuenta al
final de que, casi en un noventa por ciento, ese contenido está en ficheros de texto plano: documentos de Org o de
Markdown para mis escritos, notas y traducciones; o documentos de TeX / LaTeX para mis trabajos en composición
tipográfica y producción editorial. Eso sin mencionar todo un grupo misceláneo de scripts en Bash, Python, Lua, Perl,
etc. En suma: texto puro y simple. Nada de documentos de Word, ni de LibreOffice ni cosa parecida. Por tanto, para esos
menesteres no hay como tirar del maravilloso comando grep
de nuestra terminal. Es más (y ya que un servidor casi nunca
sale de allí), podemos también usar el modo Grep de Emacs, que es muy sencillo y cuyo uso más elemental paso a describir
a continuación.
Supongamos que estamos confortablemente en Emacs, y que queremos buscar, dentro de todos los documentos de texto de
nuestro presente directorio, la expresión «Telémaco». Pues tecleamos el atajo M-x grep
y, acto seguido, en el búfer
informativo de la parte inferior, Emacs nos ofrece la posibilidad de lanzar grep con una serie de opciones ya definidas:
grep --color -nH --null -e
Estas opciones vendrían a significar lo siguiente (para saber más de grep, siempre es bueno echarle un vistazo a las páginas de su manual):
- –color
- resalta la búsqueda en color
- -n
- indica el número de línea en que aparece la expresión buscada dentro de cada archivo
- -H
- imprime en el resultado el nombre completo de cada archivo
- –null
- Introduce el carácter ASCII NUL para evitar complicaciones cualdo el nombre del archivo tiene un corte de línea.
- -e
- Para indicar la expresión a buscar, que se escribe a continuación y entre comillas. Podemos usar también expresiones regulares y caracteres comodín.
Con estas opciones nos basta y nos sobra para el tipo de búsqueda que pretendemos, así que ya sólo queda completar en el búfer el comando con el término a buscar («Telémaco»: no se olviden de las comillas altas), y escribimos a continuación el directorio y el nombre del archivo. Podemos usar caracteres comodín. Por ejemplo, si queremos buscar el termino sólo en los archivos Org del presente directorio, escribiremos:
grep --color -nH --null -e "Telémaco" *org
Ojo, porque en este caso la búsqueda será sensitiva a mayúsculas y minúsculas. Si queremos que grep
no distinga entre ambas,
añadimos la oción -i
:
grep --color -nH --null -i -e "Telémaco" *org
¿Y si queremos hacer esa búsqueda recursiva a otras carpetas y subcarpetas dentro del presente directorio? Pues
añadimos la opción -r
grep --color -nH --null -i -r -e "Telémaco" *org
Pero también podemos querer que grep
lleve sus pesquisas a otro directorio (y también recursivamente). Entonces sólo
tenemos que indicar la ruta a dicho directorio tras la expresión a buscar:
grep --color -nH --null -i -r -e "Telémaco" /<ruta del directorio>/*org
∞
Publicado: 22/09/2018
Última actualización: 22/09/2018
Esta obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial 4.0 Internacional.