DESCRIPCIN 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 numero lneas anteriores y posteriores. Sin embargo, grep nunca mostrar cualquier lnea dada ms de una vez. -A nm , --after-context=NM Muestra numero lneas de contexto despus de las que concuerden con el patrn. -B nm , --before-context=NM Muestra numero 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, --invert-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 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, --invert-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 -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:], [: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.
El punto . concuerda con cualquier carcter solo. El smbolo \w es un sinnimo de [[:alnum:]] y \W lo es 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: ? 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 previamente concord con la n-sima subexpresin entre parntesis de la expresin regular.
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 \).
En egrep, el meta-carcter { pierde su significado especial; en su lugar emplee \{.
DIAGNSTICOS 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.
FALLOS Enve informes sobre fallos por correo electrnico a la direccin bug- gnu-utils@prep.ai.mit.edu. Asegrese de incluir la palabra grep en algn sitio del campo Asunto: (Subject:).
Nmeros de repeticin grandes en la construccin {m,n} pueden hacer que grep emplee grandes cantidades de memoria. En adicin a esto, ciertas otras obscuras expresiones regulares requieren tiempo y espacio exponenciales, y pueden hacer que grep se quede sin memoria.
Las retrorreferencias son muy lentas, y pueden requerir un tiempo exponencial.
grep Manual: grep La orden grep filtra un fichero o un flujo de datos por lnea. Contenido [ocultar] 1 Sintaxis 2 grep versus egrep versus fgrep 3 fgrep: cadenas de texto literales 4 grep: expresiones regulares bsicas o 4.1 Ejemplos 5 egrep: expresiones regulares extendidas o 5.1 Ejemplos 6 Opciones Sintaxis Si invocamos a un programa de la familia grep con una expresin y uno o ms ficheros, nos informa de las lneas que concuerden con la expresin. Sin embargo, estas rdenes admiten una serie de opciones. La sintaxis es comn a grep, egrep y fgrep: grep [opciones] patrn [fichero ...] grep versus egrep versus fgrep Existen tres "sabores" de grep: grep, egrep y fgrep. La diferencia entre ellos es las expresiones que aceptan para hacer el filtrado. Veamos un ejemplo en el que usamos los programas sin opciones sobre un fichero. De este modo me indicarn las lneas del fichero que concuerdan con la expresin. Sea el fichero datos.txt con el siguiente contenido: Archivo: datos.txt 1aaaabbb 1a+b*2345 1aaab222 1b2 1b+2 rrr1a+2 d1ab2ee a1a+b*2345 rrr1a+bbbb28
Primer caso: fgrep La siguiente orden muestra por pantalla las lneas del fichero datos.txt que contengan un "1", seguido de una "a", seguido de un smbolo ms "+", seguido de una "b", seguido de un asterisco "*", seguido de un dos. En nuestro caso son las siguientes: fgrep "1a+b*2" datos.txt 1a+b*2345 a1a+b*2345 Segundo caso: grep La siguiente orden muestra por pantalla las lneas del fichero datos.txt que contengan un "1", seguido de una "a", seguido de un smbolo ms "+", seguido de cero o ms veces el carcter "b", seguido de un dos. En nuestro caso son las siguientes: grep "1a+b*2" datos.txt rrr1a+2 rrr1a+bbbb28 Tercer caso: egrep La siguiente orden muestra por pantalla las lneas del fichero datos.txt que contengan un "1", seguido de una o ms apariciones del carcter "a", seguido de cero o ms veces el carcter "b", seguido de un dos. En nuestro caso son las siguientes: egrep "1a+b*2" datos.txt 1aaab222 d1ab2ee Como vemos, en cada caso la expresin tiene un significado distinto. La ms potente es egrep (que es tambin la ms lenta), seguida de grep y por ltimo fgrep (que es la ms eficiente). fgrep: cadenas de texto literales El programa fgrep toma la expresin que recibe como parmetro como una cadena literal. Por ejemplo, sea el fichero datos.txt con el siguiente contenido: Archivo: datos.txt asdbc aaacccb abc asacad ab_c aab*c2 aaaabbbccc
La siguiente orden indica que se buscan lneas en un que tengan una "a" seguida de una "b", seguida de un asterisco "*" seguida de una "c": fgrep "ab*c" aab*c2 grep: expresiones regulares bsicas El programa grep toma la expresin que recibe como parmetro como una expresin regular bsica. Eso quiere decir que algunos caracteres tienen un significado especial: [aeiou] : una vocal minscula. [A-Z0-9] : una letra mayscula o una cifra. [^0-9] : cualquier carcter que no sea una cifra (una letra, un smbolo, etc). * : indica que el elemento que le precede debe estar cero o ms veces. Ntese que este carcter tiene distinto significado que cuando es carcter comodn. Por ejemplo: o En "ls ab*c" se muestran los nombres de ficheros que empiezan por "ab", tienen cero o ms caracteres y acaban en "c". Por ejemplo, "abeauc" entrara en la expresin. o En "ls ab*c fichero" se muestran las lneas del fichero que contienen una "a" seguida de una "c" o una "a" seguida de una o ms veces "b" seguida de "c". Por ejemplo, "abeauc" no entrara en la expresin. . : concuerda con un carcter $ : si aparece al final de la expresin significa fin de lnea. ^ : si aparece al principio de la expresin significa principio de lnea. \ : elimina el significado especial al carcter que le sigue. Ejemplos Sea el fichero datos.txt siguiente: Archivo: datos.txt asdbc aaacccb abc asacad ab_c aab*c2 aaaabbbccc
Con la orden siguiente obtenemos: grep "ab*c" datos.txt aacccb abc asacad aaaabbbccc Con la orden siguiente no obtenemos ninguna lnea: grep "^b*c" datos.txt Con la orden siguiente obtenemos: grep "b*c" datos.txt asdbc aaacccb abc asacad ab_c aab*c2 aaaabbbccc Con la orden siguiente obtenemos: grep "b\*c" datos.txt aab*c2 Con la orden siguiente obtenemos: grep "a.c" datos.txt aaacccb abc egrep: expresiones regulares extendidas El programa egrep toma la expresin que recibe como parmetro como una expresin regular extendida. Eso quiere decir que algunos caracteres tienen un significado especial. Acontinuacin mostramos algunos de ellos: ? : indica que el elemento que le precede debe estar cero o una vez. + : indica que el elemento que le precede debe estar una o ms veces. {n} : indica que el elemento que le precede debe estar exactamente "n" veces. {n,m} : indica que el elemento que le precede debe estar entre "n" y "m" veces. ( expr1 | expr2 ) : indica que puede aparecer expr1 o expr2. Ejemplos Sea el fichero datos.txt siguiente: Archivo: datos.txt asdbc aaacccb abc asacad ab_c aab*c2 aaaabbbccc
Con la orden siguiente obtenemos: egrep "ab+" datos.txt abc ab_c aab*c2 aaaabbbccc Con la orden siguiente obtenemos: egrep "ab?c" datos.txt aaacccb abc asacad Con la orden siguiente obtenemos: egrep "a(bb|cc)" datos.txt aaacccb aaaabbbccc Con la orden siguiente obtenemos: egrep "ab{2,4}cc" datos.txt aaaabbbccc Opciones Las opciones ms destacadas de las ordenes de la familia grep son: -i : ignora maysculas y minsculas. -v : informa de las lneas que no concuerdan con la expresin. -l : si recibe varios ficheros da como salida los nombres en los que existen lneas que concuerdan. -L : si recibe varios ficheros da como salida los nombres en los que no existen lneas que concuerden.
grep La familia grep est formada por tres filtros: grep, egrep, y fgrep. En general, esta familia de programas selecciona aquellas lneas de la entrada (ficheros o entrada estndar), que contienen los caracteres que concuerdan con la expresin regular especificada, y normalmente las copia en la salida estndar. La orden grep busca lneas que contengan la o las expresiones regulares bsicas especificadas y las muestra por la salida estndar. Su sintaxis es la siguiente: grep [opcin...] expresin_regular_bsica [fichero...] Si no se especifica ningn fichero, grep leer de la entrada estndar. $ cat f1.txt comida casiseta playa ciclismo campeonato estudiar ambicioso estado $ grep 'am' f1.txt campeonato ambicioso $ grep '^am' f1.txt ambicioso Si queremos mostrar las lneas en las que no se encuentra el patrn, usaremos la opcin -v: $ grep -v 'am' f1.txt comida casiseta playa ciclismo estudiar estado Podemos saber con la opcin -n, el nmero de lnea dentro del fichero de las lneas que se muestran (por defecto, las que contienen la expresin regular). $ grep -n 'am' f1.txt 5:campeonato 7:ambicioso Si lo que nos interesa es saber nicamente el total de lneas que se muestran, es decir, las que coinciden con el patrn o las que no coinciden con el patrn si se especific -v, usaremos la opcin -c: $ grep -c 'am' f1.txt 2 Podemos hacer que grep busque varios patrones, para lo cual debemos escribirlos en un fichero (uno por lnea) e indicrselo con la opcin -f: $ grep -f patrones f1.txt comida casiseta playa campeonato ambicioso Podemos mostrar slo el nombre de los ficheros con (o sin, -v) lineas en las que se encuentra el patrn, usando la opcin -l, o lo contrario con -L. $ grep -l 'am' f1.txt f2.txt f3.txt f1.txt $ grep -L 'am' f1.txt f2.txt f3.txt f2.txt f3.txt $ grep -lv 'am' f1.txt f2.txt f3.txt f1.txt f2.txt f3.txt $ grep -Lv 'am' f1.txt f2.txt f3.txt Podemos hacer con la opcin --color que las coincidencias de la expresin regular aparezca en color: $ grep --color 'am' f1.txt campeonato ambicioso No tenemos por qu buscar todas las coincidencias, el proceso puede pararse tras encontrar n lneas que concuerden, para ello usamos la opcin -m: $ grep -m 1 'am' f1.txt campeonato La opcin -o muestra slo los trozos de las lneas que coinciden con el patrn: $ ls -l | grep -o '3[0-9]' 30 36 37 37 La opcin -b muestra la posicin dentro del fichero del primer carcter de las lneas que coinciden con el patrn. Si va con -o sera la posicin dentro del fichero del primer carcter de la coincidencia. La posicin del primer carcter del fichero es la 0. $ grep -b 'am' f1.txt 31:campeonato 51:ambicioso usuario@debian:~/tmp$ grep -bo 'am' f1.txt 32:am 51:am Existen una serie de opciones que permiten mostrar la lnea de la coincidencia y su contexto. Por ejemplo, la opcin -A muestra el nmero especificado de lneas que siguen a la lnea de la coincidencia. $ grep -A 1 'am' f1.txt campeonato estudiar ambicioso estado Otras opciones para grep son: -w El patrn debe cuadrar con una palabra (secuencia de letras, dgitos y _). -e patrn til para cuando el patrn comienza con un guin (-), pues se confundira con opciones. -i Para no tener en cuenta la diferencia entre maysculas y minsculas. -q No muestra nada por pantalla. Slo devuelve como cdigo de salida un 0 si ha encontrado coincidencias y 1 en caso contrario. til fundamentalmente con scripts, donde slo interese saber si tiene o no coincidencias. -H Muestra el nombre del fichero delante de la lnea. -B n Muestra las n lneas que preceden a las lneas con coincidencias. -C n Muestra las n lneas que preceden y suceden a las lneas con coincidencias. Como especificar -A n y -B n juntas. -r Busca recursivamente en los directorios especificados. -E Hace que grep funcione como egrep. -F Hace que grep funcione como fgrep. -G Hace que grep funcione como grep. Es la opcin por defecto de grep. Es para utilizar con fgrep o egrep. -h Cuando se especifica ms de un fichero de bsqueda, delante de la lnea aparece el nombre del fichero. Para evitar esto, est la opcin -h. -x Se obliga a que el patrn coincida con la lnea completa. --exclude=patrn Excluye de la bsqueda todos aquellos ficheros cuyo nombre concuerde con patrn, que est expresado como en la expansin de ficheros. --exclude-from=fichero Excluye de la bsqueda todos aquellos ficheros cuyo nombre concuerde con alguno de los patrones que se encuentran en fichero. (patrones de expansin de ficheros) --exclude-dir=patrn Excluye en una bsqueda recursiva todos los directorios cuyo nombre coincida con patrn. (patrn de expansin de ficheros)
egrep El comando egrep funciona igual que grep, con la diferencia de que admite adems de las expresiones regulares bsicas, las extendidas. Todas las opciones vistas para grep sirven para egrep. La sintaxis general es: egrep [opcin...] expresin_regular_extendida [fichero...] Se puede ejecutar el comando egrep desde grep con la opcin -E. Hay que tener en cuenta que el operador de repeticin llave ( { ), con esta orden, no funciona correctamente, y no debera usarse.
fgrep El comando fgrep funciona igual que grep, con la diferencia de que slo busca cadenas literales. Todas las opciones vistas para grep sirven para egrep. La sintaxis general es: fgrep [opcin...] cadena [fichero...] Se puede ejecutar el comando fgrep desde grep con la opcin -F. El motivo de que existan estos tres filtros, y no slo uno, el egrep, es porque buscar expresiones regulares tiene un alto coste en tiempo, y para los casos de buscar cadenas literales el algoritmo de fgrep es muchos ms sencillo y eficiente que el algoritmo de egrep. Lo mismo pasa con grep, es mucho ms fcil buscar expresiones regulares bsicas que extendidas.