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.