Sunteți pe pagina 1din 19

NOMBRE

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



SINOPSIS
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] [--invert-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...

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.