Scroll to navigation

GREP(1) General Commands Manual GREP(1)

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

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:

Interpreta patrón como una expresión regular básica (vea más abajo). Éste es el comportamiento predeterminado.
Interpreta patrón coma una expresión regular extendida (vea más adelante).
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:

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.
Muestra núm líneas de contexto después de las que concuerden con el patrón.
Muestra núm líneas de contexto antes de las que concuerden con el patrón.
Equivalente a -2.
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).
Muestra el desplazamiento en bytes desde el principio del fichero de entrada antes de cada línea de salida.
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, --revert-match (vea más abajo), muestra el número de líneas que no concuerden.
Emplea patrón como el patrón; útil para proteger patrones que comiencen con -.
Obtiene el patrón de fichero.
Suprime la impresión de los nombres de ficheros antes de las líneas concordantes en la salida, cuando se busca en varios ficheros.
No hace caso de si las letras son mayúsculas o minúsculas ni en el patrón ni en los ficheros de entrada.
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.
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.
Prefija cada línea de salida con el número de línea de su fichero de entrada correspondiente.
Silencioso; suprime la salida normal. La búsqueda finaliza en la primera concordancia.
Suprime los mensajes de error sobre ficheros que no existen o no se pueden leer.
Invierte el sentido de la concordancia, para seleccionar las líneas donde no las hay.
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.
Selecciona solamente aquellas concordancias que constan de toda la línea.
Sinónimo obsoleto de -i.
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.
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.

10 Septiembre 1992 Proyecto GNU