Hoy les traigo una experiencia «recién salida del horno». Esta tarde un compañero me consultó cómo hacer lo siguiente: extraer una parte de la primera línea de un archivo de texto utilizando la línea de comandos. La dificultad residía en identificar el archivo a partir de cierta palabra clave contenida en el mismo. Además, de entre todos los archivos donde se encontrara dicha palabra, se necesitaba seleccionar el último que había sido creado. El único «consuelo» era que solamente había que buscar en un solo directorio. Con ejemplos que hemos visto anteriormente en el blog y un poco más de grep, pudimos solucionarlo.
Más de grep
Hasta este momento hemos usado grep casi exclusivamente para buscar patrones en uno o más archivos. Podemos ir más allá y en vez de mostrar la ocurrencia del patrón, devolver el nombre del archivo donde se encontró. Para empezar,
grep -il palabra /directorio/de/busqueda/*
regresará la lista de archivos ubicados dentro de /directorio/de/busqueda donde se encuentre palabra dentro del contenido. La opción combinada -il
nos asegurará de que no se haga distinción entre mayúsculas y minúsculas al buscar el patrón, y que se devuelva el nombre del archivo en vez de la línea donde se detectó la ocurrencia del mismo. Cuando agregamos
grep -il palabra /directorio/de/busqueda/* | tail -n 1
obtuvimos el último de la lista anterior. A continuación, hicimos
head -n 1 $(grep -il palabra /directorio/de/busqueda/* | tail -n 1)
para mostrar toda la primera línea del archivo. En este punto lo único que nos restaba era extraer la parte de la misma. Antes de usar cut para tal fin, tuvimos que reducir todos los espacios de la primera línea a uno solo:
head -n 1 $(grep -il palabra /directorio/de/busqueda/* | tail -n 1) | tr -s ' '
y finalmente seleccionar los dos primeros campos (donde encontramos el texto que nos interesaba):
head -n 1 $(grep -il palabra /directorio/de/busqueda/* | tail -n 1) | tr -s ' ' | cut -d' ' -f1-2
Como pueden ver, con un poco de ingenio y un par de comandos resolvimos la cuestión.
En el sitio The Linux Documentation Project podemos encontrar más ejemplos del uso de grep.
Espero que este post les haya resultado útil. ¡Nos leemos en breve!
¡Aprovechá la oportunidad de suscribirte al blog para recibir en tu correo el post nuestro de cada día, novedades, y promociones exclusivas!