viernes, 21 de octubre de 2011

De pesca con grep

Acabo de encontrar una opción chingona para el comando grep.

Muchas veces debemos de buscar varias subcadenas de caracteres dentro de un archivo de texto o una salida de comando (como por ejemplo ls).
Pues hoy me enfrente con ese problema y lo pude resolver de dos maneras.
La respuesta la saque de este sitio: http://www.cyberciti.biz/faq/searching-multiple-words-string-using-grep/

Preámbulo
Debia manipular los archivos que presentaran alguna de las siguientes subcadenas en su nombre: BZ, PM, NU, HO, SL, CR, GT.

Dentro de una carpeta donde hay "chingo" de otros archivos.
Recurrí al buen comando grep con la opción -E seguida de la expresión regular "BZ|CR|GT|HO|NU|PM|SL".
i.e. ls | grep -E "BZ|CR|GT|HO|NU|PM|SL"
La salida de este comando fue únicamente los archivos que me interesaban.

Esto también se puede resolver con el comando fgrep (grep -f) donde toma valores de un archivo de texto simple para cotejarlo con el archivo de texto en cuestión, en este caso la salida de ls.

Por ejemplo, hice un archivo de texto llamado voc.txt con lo siguiente:
BZ
CR
GT
HO
NU
PM
SL

luego utilicé ls | grep -f voc.txt
y me dio el mismo resultado.

FELICIDAD!

Y un saludo pa' la banda linuxera, el grillo, el esdebon, el root, liz y amparo.