NOMBRE¶
grep, egrep, fgrep - muestran líneas que concuerdan con un patrón
SINOPSIS¶
grep [-AB] núm] [-CEFGVbchiLlnqsvwxyUu] [[-e ] patrón | -f
fichero] [--extended-regexp] [--fixed-strings] [--basic-regexp]
[--regexp=PATRÓN] [--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...
DESCRIPCIÓN¶
Grep busca en la entrada, bien en la que se le especifica con nombres de
ficheros o bien en la entrada estándar si no se le dan dichos
nombres o si uno de éstos consiste en
-, líneas que
concuerden o coincidan con el
patrón dado. Si no se dice otra
cosa,
grep muestra las líneas que concuerden.
Hay tres grandes variantes de
grep, controladas por las siguientes
opciones:
- -G, --basic-regexp
- Interpreta patrón como una expresión
regular básica (vea más abajo). Éste es el comportamiento
predeterminado.
- -E, --extended-regexp
- Interpreta patrón coma una expresión
regular extendida (vea más adelante).
- -F, --fixed-strings
- Interpreta patrón como una lista de cadenas de
caracteres fijas, separadas por saltos de línea; se busca la
concordancia de una cualquiera de ellas.
Además, están disponibles dos programas que son variantes de
éste:
egrep y
fgrep.
egrep es similar (pero no
idéntico) a
grep -E, y es compatible con el
egrep
histórico de Unix.
fgrep es lo mismo que
grep -F.
Todas las variantes de
grep entienden las siguientes opciones:
- -núm
- Las líneas concordantes se mostrarán
acompañadas de núm líneas anteriores y posteriores.
Sin embargo, grep nunca mostrará cualquier línea dada
más de una vez.
- -A núm , --after-context=NÚM
- Muestra núm líneas de contexto
después de las que concuerden con el patrón.
- -B núm , --before-context=NÚM
- Muestra núm líneas de contexto antes de
las que concuerden con el patrón.
- -C, --context
- Equivalente a -2.
- -V, --version
- Muestra el número de versión de grep en la
salida estándar de errores. Este número de versión
debería incluirse en todos los informes de fallos (vea más
abajo).
- -b, --byte-offset
- Muestra el desplazamiento en bytes desde el principio del
fichero de entrada antes de cada línea de salida.
- -c, --count
- Suprime la salida normal; en su lugar muestra el
número de líneas que concuerdan con el patrón para cada
fichero de entrada. Con la opción -v, --invert-match (vea
más abajo), muestra el número de líneas que no
concuerden.
- -e
patrón,--regexp=PATRÓN
- Emplea patrón como el patrón; útil
para proteger patrones que comiencen con -.
- -f fichero,--file=FICHERO
- Obtiene el patrón de fichero.
- -h, --no-filename
- Suprime la impresión de los nombres de ficheros antes
de las líneas concordantes en la salida, cuando se busca en varios
ficheros.
- -i, --ignore-case
- No hace caso de si las letras son mayúsculas o
minúsculas ni en el patrón 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 produciría ninguna salida. La
búsqueda 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 produciría alguna salida. La
búsqueda se detendrá en la primera concordancia.
- -n, --line-number
- Prefija cada línea de salida con el número de
línea de su fichero de entrada correspondiente.
- -q, --quiet
- Silencioso; suprime la salida normal. La búsqueda
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 líneas donde no las hay.
- -w, --word-regexp
- Selecciona solamente aquellas líneas que contienen
concordancias que forman palabras completas. La comprobación consiste
en que la cadena de caracteres concordante debe estar al principio de la
línea o precedida por un carácter que no forme parte de una
palabra. De forma similar, debe estar o al final de la línea o ser
seguida por un carácter no constituyente de palabra. Los caracteres
que se consideran como parte de palabras son letras, dígitos y el
subrayado.
- -x, --line-regexp
- Selecciona solamente aquellas concordancias que constan de
toda la línea.
- -y
- Sinónimo 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 leídos
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
adivinación 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 línea el par de caracteres CR/LF, esto
hará que algunas expresiones regulares fallen. Esta opción
sólo tiene sentido en MS-DOS y MS-Windows.
- -u, --unix-byte-offsets
- Informa de desplazamientos de bytes al estilo de Unix. Esta
opción 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 línea. Esto producirá resultados
idénticos a ejecutar grep en un sistema Unix. Esta opción
no tiene efecto a menos que se dé también la opción
-b; sólo tiene sentido en MS-DOS y MS-Windows.
EXPRESIONES REGULARES¶
Una expresión regular es un patrón que describe un conjunto de cadenas
de caracteres. Las expresiones regulares se construyen de forma análoga a
las expresiones aritméticas, combinando expresiones más
pequeñas mediante ciertos operadores para formar expresiones complejas.
El programa
grep entiende dos versiones diferentes de sintaxis para las
expresiones regulares: la ``básica'' y la ``extendida''. En la
versión de
grep de GNU, no hay diferencia en usar una u otra en
cuanto a la funcionalidad disponible. En otras implementaciones, las
expresiones regulares básicas son menos potentes. La siguiente
descripción se aplica a expresiones regulares extendidas; las diferencias
con las básicas se resumen a continuación.
Los bloques de construcción fundamentales son las expresiones regulares que
concuerdan con un solo carácter. La mayoría de los caracteres,
incluyendo todas las letras y dígitos, son expresiones regulares que
concuerdan consigo mismos. Cualquier meta-carácter con un significado
especial debe ser protegido precediéndolo con una barra inclinada
inversa.
Una lista de caracteres rodeados por
[ y
] concuerda con cualquier
carácter de esa lista; si el primer carácter de la lista es el
acento circunflejo
^ entonces concuerda con cualquier carácter de
fuera de la lista. Por ejemplo, la expresión regular
[0123456789] concuerda con cualquier carácter dígito. Se
puede especificar un rango de caracteres ASCII dando el primero y el
último, separados por un guión. Finalmente, están 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 inglés)
[0-9A-Za-z],
salvo que la última forma depende de que la codificación de
caracteres siga el estándar ISO-646 o ASCII, mientras que la primera es
transportable. (Observe que los corchetes en estos nombres de clases son parte
de los nombres simbólicos, y deben incluirse además 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, póngalo el primero de la lista. De forma similar, para
incluir un
^ literal, póngalo en cualquier sitio menos el primero.
Finalmente, para incluir un
- literal, póngalo el último.
El punto
. concuerda con cualquier carácter solo. El símbolo
\w es un sinónimo de
[[:alnum:]] y
\W lo es de
[^[:alnum]].
El acento circunflejo
^ y el signo del dólar (y del escudo
portugués)
$ son meta-caracteres que respectivamente concuerdan
con la cadena vacía al comienzo y al final de una línea. Los
símbolos
\< y
\> respectivamente concuerdan con la
cadena vacía al principio y al final de una palabra. El símbolo
\b concuerda con la cadena vacía al borde de una palabra, y
\B concuerda con la cadena vacía supuesto que
no esté
en el extremo de una palabra.
Una expresión regular que concuerde con un solo carácter puede ser
seguida por uno de estos varios operadores de repetición:
- ?
- El elemento precedente es opcional y concuerda como mucho
una vez.
- *
- El elemento precedente concordará cero o más
veces.
- +
- El elemento precedente concordará una o más
veces.
- {n}
- El elemento precedente concuerda exactamente n
veces.
- {n,}
- El elemento precedente concuerda n o más
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 más de m veces.
Dos expresiones regulares pueden concatenarse; la expresión regular
resultante concuerda con cualquier cadena formada mediante la
concatenación de dos subcadenas que concuerdan respectivamente con las
subexpresiones concatenadas.
Dos expresiones regulares pueden juntarse mediante el operador infijo
|;
la expresión regular resultante concuerda con cualquier cadena que
concuerde con cualquiera de las subexpresiones.
La repetición tiene precedencia sobre la concatenación, la cual a su
vez tiene precedencia sobre la alternancia. Una subexpresión entera puede
ser encerrada entre paréntesis para subvertir estas reglas de
precedencia.
La retrorreferencia
\n, donde
n es un dígito simple,
concuerda con la subcadena que previamente concordó con la
n-sima
subexpresión entre paréntesis de la expresión regular.
En las expresiones regulares básicas, los meta-caracteres
?,
+,
{,
|,
(, y
) pierden su significado
especial; en su lugar emplee las versiones protegidas mediante la barra
inversa
\?,
\+,
\{,
\|,
\(, y
\).
En
egrep, el meta-carácter
{ pierde su significado especial;
en su lugar emplee
\{.
DIAGNÓSTICOS¶
Normalmente, el status de salida es 0 si se encuentran concordancias, y 1 si no
se encuentran. (La opción
-v invierte el sentido del status de
salida.) El status de salida es 2 si había errores de sintaxis en el
patrón, si los ficheros de entrada eran inaccesibles, o en caso de otros
errores del sistema.
FALLOS¶
Envíe informes sobre fallos por correo electrónico a la dirección
bug-gnu-utils@prep.ai.mit.edu. Asegúrese de incluir la palabra
``grep'' en algún sitio del campo ``Asunto:'' (``Subject:'').
Números de repetición grandes en la construcción
{m,n} pueden hacer que grep emplee grandes
cantidades de memoria. En adición 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.