Sunteți pe pagina 1din 9

El comando grep, para filtrar texto, uso y ejemplos

Escrito por Gustavo Guillermo Perez (madgus) Martes, 06 de Enero de 2009 17:22 - ltima actualizacin Martes, 06 de Enero de 2009 17:46

El comando grep, nos ayudar a filtrar lneas de texto de un flujo de datos, o de un archivo de texto.

Ejemplo, tenemos archivos que tienen cierto cdigo y no lo encontramos, necesitamos todos los archivos que tengan el trozo de texto "magick", porque por ejemplo se nos antoja empezar a programar con ImageMagick y no encontramos las cabeceras de C, los archivos terminados en .h

gus@gusgus $ find /usr/include -type f -iname "*.h" | while read header; do grep -l "magick" "$header"; done ./Magick++/CoderInfo.h ./Magick++/Drawable.h ./Magick++/Image.h ./Magick++/Include.h ./Magick++/STL.h gus@gusgus $ /usr/include

Como podemos ver, usamos el comando find para encontrar los archivos (-type f) que terminan en .h (-iname "*.h") y mientras podamos leer la cabecera.h, imprimir el nombre en pantalla (-l) su se encuentra el texto "magick" del nombre del archivo guardado en la variable "$header", las comillas dobles son importantes para que los nombres de archivo con espacios en blanco no den error al comando grep, pero an as no es comn que un buen programador llame con espacio a sus archivos.

Otro ejemplo, necesitamos ver todas las lneas que el ncleo de linux imprimi en la consola de errores, que contengan informacin acerca del disco duro nombrado sda.

gus@gusgus /usr/include $ dmesg | grep sda sd 1:0:0:0: [sda] 976773168 512-byte hardware sectors (500108 MB) sd 1:0:0:0: [sda] Write Protect is off sd 1:0:0:0: [sda] Mode Sense: 00 3a 00 00 sd 1:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA sda: sda1 sda2 sda3 sda4 < sda5 sda6 sda7 sda8 sda9 > sd 1:0:0:0: [sda] Attached SCSI disk

1/9

El comando grep, para filtrar texto, uso y ejemplos


Escrito por Gustavo Guillermo Perez (madgus) Martes, 06 de Enero de 2009 17:22 - ltima actualizacin Martes, 06 de Enero de 2009 17:46

XFS mounting filesystem sda3 Ending clean XFS mount for filesystem: sda3 XFS mounting filesystem sda8 Ending clean XFS mount for filesystem: sda8 XFS mounting filesystem sda9 Ending clean XFS mount for filesystem: sda9 XFS mounting filesystem sda7 Ending clean XFS mount for filesystem: sda7 Adding 2000052k swap on /dev/sda5. Priority:-1 extents:1 across:2000052k XFS mounting filesystem sda6 Ending clean XFS mount for filesystem: sda6 gus@gusgus /usr/include $

Como podemos ver, el comando dmesg imprime toda la consola de errores, y entubamos con la tubera o pipe | el contenido del comando dmesg impreso en la salida estandar, al comando grep, y slo le pedimos que filtre con el texto sda.

En la seccin de tutoriales puedes ver, ms sobre las tuberas y comandos.

Grep, no es slo un comando, es un sistema completo de procesamiento de expresiones regulares, grep puede ignorar maysculas y minsculas, imprimir solamente los correos electrnicos de un documento. Para eso veamos el manual a continuacin.

GREP

Section: User Commands (1)

grep, egrep, fgrep - muestran lneas que concuerdan con un patrn

NOMBRE

grep [-AB] nm] [-CEFGVbchiLlnqsvwxyUu] [[-e ] patrn | -f fichero] [--extended-regexp] [--fixed-strings] [--basic-regexp] [--regexp=PATRN] [--file=FICHERO] [--ignore-case] [--word-regexp] [--line-regexp] [--line-regexp] [--no-messages] [--revert-match] [--version] [--help] [--byte-offset] [--line-number] [--with-filename] [--no-filename] [--quiet] [--silent] [--files-without-match] [--files-with-matcces] [--count] [--before-context=NUM] [--after-context=NUM] [--context] [--binary] [--unix-byte-offsets] ficheros... DESCRIP

SINOPSIS

CIN

2/9

El comando grep, para filtrar texto, uso y ejemplos


Escrito por Gustavo Guillermo Perez (madgus) Martes, 06 de Enero de 2009 17:22 - ltima actualizacin Martes, 06 de Enero de 2009 17:46

Grep busca en la entrada, bien en la que se le especifica con nombres de ficheros o bien en la entrada estndar si no se le dan dichos nombres o si uno de stos consiste en , lneas que concuerden o coincidan con el patrn dado. Si no se dice otra cosa, grep muestra las lneas que concuerden. Hay tres grandes variantes de grep, controladas por las siguientes opciones: -G, --basic-regexp Interpreta patrn como una expresin regular bsica (vea ms abajo). ste es el comportamiento predeterminado. -E, --extended-regexp Interpreta patrn coma una expresin regular extendida (vea ms adelante). -F, --fixed-strings Interpreta patrn como una lista de cadenas de caracteres fijas, separadas por saltos de lnea; se busca la concordancia de una cualquiera de ellas. Adems, estn disponibles dos programas que son variantes de ste: egrep y fgrep. egrep es similar (pero no idntico) a grep-E , y es compatible con el egrep histrico de Unix. fgrep es lo mismo que grep-F . Todas las variantes de grep entienden las siguientes opciones: -nm Las lneas concordantes se mostrarn acompaadas de nm lneas anteriores y posteriores. Sin embargo, rep nunca mostrar cualquier lnea dada ms de una vez. -A nm, --after-context=NM Muestra nm lneas de contexto despus de las que concuerden con el patrn. -B nm, --before-context=NM Muestra g

3/9

El comando grep, para filtrar texto, uso y ejemplos


Escrito por Gustavo Guillermo Perez (madgus) Martes, 06 de Enero de 2009 17:22 - ltima actualizacin Martes, 06 de Enero de 2009 17:46

nm lneas de contexto antes de las que concuerden con el patrn. -C, --context Equivalente a -2 . -V, --version Muestra el nmero de versin de grep en la salida estndar de errores. Este nmero de versin debera incluirse en todos los informes de fallos (vea ms abajo). -b, --byte-offset Muestra el desplazamiento en bytes desde el principio del fichero de entrada antes de cada lnea de salida. -c, --count Suprime la salida normal; en su lugar muestra el nmero de lneas que concuerdan con el patrn para cada fichero de entrada. Con la opcin -v, --revert-match (vea ms abajo), muestra el nmero de lneas que no concuerden. -e patrn, --regexp=PATRN Emplea patrn como el patrn; til para proteger patrones que comiencen con . -f fichero, --file=FICHERO Obtiene el patrn de fichero . -h, --no-filename Suprime la impresin de los nombres de ficheros antes de las lneas concordantes en la salida, cuando se busca en varios ficheros. -i, --ignore-case No hace caso de si las letras son maysculas o minsculas ni en el patrn ni en los ficheros de entrada. -L, --files-without-match Suprime la salida normal; en su lugar muestra el nombre de cada fichero de entrada donde no se encuentre ninguna concordancia y por lo tanto de cada fichero que no producira ninguna salida. La bsqueda se detendr al llegar a la primera concordancia. -l, --files-with-matches Suprime la salida normal; en su lugar muestra el nombre de cada fichero de entrada que

4/9

El comando grep, para filtrar texto, uso y ejemplos


Escrito por Gustavo Guillermo Perez (madgus) Martes, 06 de Enero de 2009 17:22 - ltima actualizacin Martes, 06 de Enero de 2009 17:46

producira alguna salida. La bsqueda se detendr en la primera concordancia. -n, --line-number Prefija cada lnea de salida con el nmero de lnea de su fichero de entrada correspondiente. -q, --quiet Silencioso; suprime la salida normal. La bsqueda finaliza en la primera concordancia. -s, --silent Suprime los mensajes de error sobre ficheros que no existen o no se pueden leer. -v, --revert-match Invierte el sentido de la concordancia, para seleccionar las lneas donde no las hay. -w, --word-regexp Selecciona solamente aquellas lneas que contienen concordancias que forman palabras completas. La comprobacin consiste en que la cadena de caracteres concordante debe estar al principio de la lnea o precedida por un carcter que no forme parte de una palabra. De forma similar, debe estar o al final de la lnea o ser seguida por un carcter no constituyente de palabra. Los caracteres que se consideran como parte de palabras son letras, dgitos y el subrayado. -x, --line-regexp Selecciona solamente aquellas concordancias que constan de toda la lnea. -y Sinnimo obsoleto de -i . -U, --binary Trata el(los) fichero(s) como binario(s). De forma predeterminada, bajo MS-DOS y MS-Windows, grep intenta adivinar el tipo del fichero mirando los contenidos de los primeros 32 kB ledos de l. Si grep decide que el fichero es de texto, quita los caracteres CR (retorno de carro) de los contenidos originales del fichero (para que las expresiones regulares con ^ y $ funcionen correctamente). Al especificar -U deshabilitamos este intento de adivinacin del tipo del fichero, haciendo que todos se lean y pasen al mecanismo de concordancia tal cuales; si el fichero lo es de texto y tiene al final de cada lnea el par de caracteres CR/LF, esto har que algunas expresiones regulares fallen. Esta opcin slo tiene sentido en MS-DOS y MS-Windows. -u, --unix-byte-offsets Informa de desplazamientos de bytes al estilo de Unix. Esta opcin hace que grep muestre los desplazamientos de bytes como si el fichero fuera de texto al estilo de Unix; o sea, sin los caracteres CR al final de cada lnea. Esto producir resultados idnticos a ejecutar grep en un sistema Unix. Esta opcin no tiene efecto a menos que se d tambin la opcin

5/9

El comando grep, para filtrar texto, uso y ejemplos


Escrito por Gustavo Guillermo Perez (madgus) Martes, 06 de Enero de 2009 17:22 - ltima actualizacin Martes, 06 de Enero de 2009 17:46

-b ; slo tiene sentido en MS-DOS y MS-Windows.

EXPRESIONES REGULARES
Una expresin regular es un patrn que describe un conjunto de cadenas de caracteres. Las expresiones regulares se construyen de forma anloga a las expresiones aritmticas, combinando expresiones ms pequeas mediante ciertos operadores para formar expresiones complejas. El programa grep entiende dos versiones diferentes de sintaxis para las expresiones regulares: la ``bsica'' y la ``extendida''. En la versin de grep de GNU, no hay diferencia en usar una u otra en cuanto a la funcionalidad disponible. En otras implementaciones, las expresiones regulares bsicas son menos potentes. La siguiente descripcin se aplica a expresiones regulares extendidas; las diferencias con las bsicas se resumen a continuacin. Los bloques de construccin fundamentales son las expresiones regulares que concuerdan con un solo carcter. La mayora de los caracteres, incluyendo todas las letras y dgitos, son expresiones regulares que concuerdan consigo mismos. Cualquier meta-carcter con un significado especial debe ser protegido precedindolo con una barra inclinada inversa. Una lista de caracteres rodeados por [ y ] concuerda con cualquier carcter de esa lista; si el primer carcter de la lista es el acento circunflejo ^ entonces concuerda con cualquier carcter de fuera de la lista. Por ejemplo, la expresin regular [0123456789] concuerda con cualquier carcter dgito. Se puede especificar un rango de caracteres ASCII dando el primero y el ltimo, separados por un guin. Finalmente, estn predefinidas ciertas clases de caracteres, con un nombre para cada una. Estos nombres son auto-explicativos, y son [:alnum:] , [:alpha:] , [:cntrl:] , [:digit:] , [:graph:] , [:lower:] ,

6/9

El comando grep, para filtrar texto, uso y ejemplos


Escrito por Gustavo Guillermo Perez (madgus) Martes, 06 de Enero de 2009 17:22 - ltima actualizacin Martes, 06 de Enero de 2009 17:46

[:print:] , [:punct:] , [:space:] , [:upper:] , y [:xdigit:]. Por ejemplo, [[:alnum:]] significa (en ingls) [0-9A-Za-z] , salvo que la ltima forma depende de que la codificacin de caracteres siga el estndar ISO-646 o ASCII, mientras que la primera es transportable. (Observe que los corchetes en estos nombres de clases son parte de los nombres simblicos, y deben incluirse adems de los corchetes que delimitan la lista entre corchetes.) La mayor parte de los meta-caracteres pierden su significado especial dentro de estas listas. Para incluir un ] literal, pngalo el primero de la lista. De forma similar, para incluir un ^ literal, pngalo en cualquier sitio menos el primero. Finalmente, para incluir un literal, pngalo el ltimo. y W lo es de [^[:alnum]] . El punto . concuerda con cualquier carcter solo. El smbolo w es un sinnimo de [[:alnum:]]

El acento circunflejo ^ y el signo del dlar (y del escudo portugus) $ son meta-caracteres que respectivamente concuerdan con la cadena vaca al comienzo y al final de una lnea. Los smbolos < y> respectivamente concuerdan con la cadena vaca al principio y al final de una palabra. El smbolo b concuerda con la cadena vaca al borde de una palabra, y B concuerda con la cadena vaca supuesto que no est en el extremo de una palabra. Una expresin regular que concuerde con un solo carcter puede ser seguida por uno de estos varios operadores de repeticin:

7/9

El comando grep, para filtrar texto, uso y ejemplos


Escrito por Gustavo Guillermo Perez (madgus) Martes, 06 de Enero de 2009 17:22 - ltima actualizacin Martes, 06 de Enero de 2009 17:46

? El elemento precedente es opcional y concuerda como mucho una vez. * El elemento precedente concordar cero o ms veces. + El elemento precedente concordar una o ms veces. { n } El elemento precedente concuerda exactamente n veces. { n ,} El elemento precedente concuerda n o ms veces. {, m } El elemento precedente es opcional y concuerda como mucho m veces. { n , m } El elemento precedente concuerda como poco n veces, pero no ms de m veces. Dos expresiones regulares pueden concatenarse; la expresin regular resultante concuerda con cualquier cadena formada mediante la concatenacin de dos subcadenas que concuerdan respectivamente con las subexpresiones concatenadas. Dos expresiones regulares pueden juntarse mediante el operador infijo |; la expresin regular resultante concuerda con cualquier cadena que concuerde con cualquiera de las subexpresiones. La repeticin tiene precedencia sobre la concatenacin, la cual a su vez tiene precedencia sobre la alternancia. Una subexpresin entera puede ser encerrada entre parntesis para subvertir estas reglas de precedencia. La retrorreferencia n , donde n es un dgito simple, concuerda con la subcadena que

8/9

El comando grep, para filtrar texto, uso y ejemplos


Escrito por Gustavo Guillermo Perez (madgus) Martes, 06 de Enero de 2009 17:22 - ltima actualizacin Martes, 06 de Enero de 2009 17:46

previamente concord con la parntesis de la expresin regular.

n-sima subexpresin entre

En las expresiones regulares bsicas, los meta-caracteres ?, +, {, |, (, y ) pierden su significado especial; en su lugar emplee las versiones protegidas mediante la barra inversa ? , + , { , | , ( , y ) .

STICOS

En egrep, el meta-carcter { pierde su significado especial; en su lugar emplee {.

DIAGN

Normalmente, el status de salida es 0 si se encuentran concordancias, y 1 si no se encuentran. (La opcin -v invierte el sentido del status de salida.) El status de salida es 2 si haba errores de sintaxis en el patrn, si los ficheros de entrada eran inaccesibles, o en caso de otros errores del sistema.

9/9

S-ar putea să vă placă și