En sistemas operativos tipo Unix, el comando egrep busca un patrón de texto, utilizando expresiones regulares extendidas para realizar la coincidencia. Ejecutar egrep es equivalente a ejecutar grep con la opción -E.
Esta página cubre la versión GNU/Linux de egrep.
Sintaxis
egrep PATTERN
Opciones
-A NUM, –after-context=NUM |
Imprime NUM líneas de contexto al final de las líneas coincidentes. Coloca una línea que contiene — entre grupos contiguos de coincidencias. |
-a, –text | Procesa un archivo binario como si fuera texto; esto es equivalente a la opción –binary-files=text. |
-B NUM, –before-context=NUM |
Imprime NUM líneas de contexto inicial antes de las líneas coincidentes. Coloca una línea que contiene — entre grupos contiguos de coincidencias. |
-C NUM, –context=NUM | Imprime NUM líneas de contexto de salida. Coloca una línea que contiene — entre grupos contiguos de coincidencias. |
-b, –byte-offset | Imprime el desplazamiento de bytes en el archivo de entrada antes de cada línea de salida. |
–binary-files=TYPE | Si los primeros bytes de un archivo indican que el archivo contiene datos binarios, asume que el archivo es de tipo TYPE. Por defecto, TYPE es binario, y grep normalmente emite un mensaje de una línea diciendo que un archivo binario coincide, o ningún mensaje si no hay coincidencia. Si TIPO es sin coincidencia, grep asume que un archivo binario no coincide; esto es equivalente a la opción -I. Si TYPE es text, grep procesa un archivo binario como si fuera texto; esto equivale a la opción -a. Advertencia: grep –binary-files=text puede producir basura binaria, lo que puede tener efectos secundarios desagradables si la salida es una terminal y si el controlador de la terminal interpreta parte de ella como comandos. |
–colour, –color |
Rodea la cadena coincidente con el marcador find en la variable de entorno GREP_COLOR. WHEN puede ser ‘nunca’, ‘siempre’, o ‘auto’ |
-c, –count | Suprimir la salida normal; en su lugar imprimir un recuento de líneas coincidentes para cada archivo de entrada. Con la opción -v, –invert-match (ver abajo), cuenta las líneas no coincidentes. |
-D ACTION, –devices=ACTION |
Si un archivo de entrada es un dispositivo, FIFO o socket, usa ACTION para procesarlo. Por defecto, ACTION es read, lo que significa que los dispositivos se leen como si fueran archivos ordinarios. Si ACTION es skip, los dispositivos se saltan silenciosamente. |
-d ACTION, –directorios=ACTION |
Si un archivo de entrada es un directorio, utilice ACTION para procesarlo. Por defecto, ACTION es read, lo que significa que los directorios se leen como si fueran archivos ordinarios. Si ACTION es skip, los directorios se saltan silenciosamente. Si ACTION es recurse, grep lee todos los archivos bajo cada directorio, recursivamente; esto es equivalente a la opción -r. |
-e PATTERN, –regexp=PATTERN |
Usa PATTERN como patrón; útil para proteger patrones que comienzan con «-«. |
-F, –fixed-strings | Interpretar PATTERN como una lista de cadenas fijas, separadas por nuevas líneas, que pueden ser comparadas. |
-P, –perl-regexp | Interpreta PATTERN como una expresión regular de Perl. |
-f FILE, –file=FILE | Obtiene patrones de FILE, uno por línea. El archivo vacío contiene cero patrones, y por lo tanto no coincide con nada. |
-G, –basic-regexp | Interpreta PATTERN como una expresión regular básica (ver más abajo). Este es el valor predeterminado. |
-H, –with-filename | Imprime el nombre del archivo para cada coincidencia. |
-h, –no-filename | Suprimir el prefijo de los nombres de archivo en la salida cuando se buscan varios archivos. |
–help | Emiten un breve mensaje de ayuda. |
-I | Procesar un archivo binario como si no contuviera datos coincidentes; esto es equivalente a la opción –binary-files=without-match. |
-i, –ignore-case | Ignorar las distinciones entre mayúsculas y minúsculas tanto en el PATTERN como en los archivos de entrada. |
-L, –files-without-match |
Suprimir la salida normal; en su lugar imprimir el nombre de cada archivo de entrada del que no se imprimiría normalmente. El escaneo se detiene en la primera coincidencia. |
-l, –files-with-matches | Suprimir la salida normal; en su lugar imprimir el nombre de cada archivo de entrada del que normalmente se imprimiría la salida. La exploración se detiene en la primera coincidencia. |
-m NUM, –max-count=NUM |
Deja de leer un archivo después de NUM líneas coincidentes. Si la entrada es una entrada estándar de un archivo regular, y salen NUM líneas coincidentes, grep se asegura de que la entrada estándar se sitúe después de la última línea coincidente antes de salir, independientemente de la presencia de líneas de contexto finales. Esto permite a un proceso de llamada reanudar una búsqueda. Cuando grep se detiene después de NÚMEROS de líneas que coinciden, saca cualquier línea de contexto posterior. Cuando también se utiliza la opción -c o –count, grep no muestra un recuento mayor que NUM. Cuando también se utiliza la opción -v o –invert-match, grep se detiene después de mostrar NUM líneas no coincidentes. |
–mmap | Si es posible, utilice la llamada al sistema mmap para leer la entrada, en lugar de la llamada al sistema read por defecto. En algunas situaciones, –mmap ofrece un mejor rendimiento. Sin embargo, –mmap puede causar un comportamiento indefinido (incluyendo volcados de núcleo) si un archivo de entrada se encoge mientras grep está operando, o si se produce un error de E/S. |
-n, –line-number | Prefija cada línea de salida con el número de línea dentro de su archivo de entrada. |
-o, –only-matching | Muestra sólo la parte de una línea que coincide con PATTERN. |
–label=LABEL | Muestra la entrada que realmente viene de la entrada estándar como entrada que viene del archivo LABEL. Esto es especialmente útil para herramientas como zgrep, por ejemplo, gzip -cd foo.gz |grep -H –label=foo algo |
–line-buffered | Usa el búfer de línea. Esto puede suponer una penalización en el rendimiento. |
-q, –quiet, –silent | Ser silencioso; no escribir nada en la salida estándar. Sale inmediatamente con estado cero si se encuentra alguna coincidencia, incluso si se detecta un error. Véase también la opción -s o –no-messages. |
-R, -r, –recursive | Lee todos los archivos bajo cada directorio, recursivamente; esto es equivalente a la opción -d recurse. Modificado por: –include=PATTERN Recurse en los directorios sólo buscando archivos que coincidan con PATTERN. –exclude=PATTERN Recurse en los directorios omitiendo los archivos que coincidan con PATTERN. |
-s, –no-messages | Suprimir los mensajes de error sobre archivos inexistentes o ilegibles. Nota de portabilidad: a diferencia de GNU grep, grep tradicional no se ajustaba a POSIX.2, porque grep tradicional carecía de una opción -q y su opción -s se comportaba como la opción -q de GNU grep. Los scripts de shell que pretenden ser portables a grep tradicional deben evitar tanto -q como -s y deben redirigir la salida a /dev/null en su lugar. |
-U, –binary | Trata el archivo(s) como binario. Por defecto, bajo MS-DOS y Microsoft Windows, grep adivina el tipo de archivo mirando el contenido de los primeros 32 KB leídos del archivo. Si grep decide que el archivo es de texto, elimina los caracteres CR del contenido original del archivo (para que las expresiones regulares con ^ y $ funcionen correctamente). Especificar -U anula esta conjetura, haciendo que todos los archivos sean leídos y pasados al mecanismo de coincidencia literalmente; si el archivo es un archivo de texto con pares CR/LF al final de cada línea, esto hace que algunas expresiones regulares fallen. Esta opción no tiene efecto en plataformas que no sean MS-DOS y MS-Windows. |
-u, –unix-byte-offsets | Informa de los byte-offsets al estilo Unix. Esta opción hace que grep informe de los desplazamientos de bytes como si el archivo fuera un archivo de texto al estilo de Unix, es decir, con los caracteres CR eliminados. Esto produce resultados idénticos a la ejecución de grep en una máquina Unix. Esta opción no tiene efecto a menos que se utilice también la opción -b; no tiene efecto en plataformas distintas de MS-DOS y MS-Windows. |
-V, –version | Imprime el número de versión de grep en el error estándar. Este número de versión debe incluirse en todos los informes de errores (véase más adelante). |
-v, –invert-match | Invierte el sentido de la coincidencia, para seleccionar las líneas no coincidentes. |
-w, –word-regexp | Selecciona sólo las líneas que contienen coincidencias que forman palabras completas. La prueba consiste en que la subcadena coincidente debe estar al principio de la línea o estar precedida por un carácter constitutivo que no sea una palabra. Del mismo modo, debe estar al final de la línea o ir seguida de un carácter constitutivo que no sea una palabra. Los caracteres constitutivos de palabras son letras, dígitos y el guión bajo. |
-x, –line-regexp | Seleccione sólo las coincidencias que coincidan exactamente con toda la línea. |
-y | Sinónimo obsoleto de -i. |
-Z, –null | Imprime un byte cero (el carácter ASCII NULL) en lugar del carácter que normalmente sigue a un nombre de archivo. Por ejemplo, grep -lZ emite un byte cero después de cada nombre de archivo en lugar de la habitual nueva línea. Esta opción hace que la salida sea inequívoca, incluso en presencia de nombres de archivos que contienen caracteres inusuales como las nuevas líneas. Esta opción se puede utilizar con comandos como find -print0, perl -0, sort -z y xargs -0 para procesar nombres de archivo arbitrarios, incluso los que contienen caracteres de nueva línea. |
Expresiones regulares
Una expresión regular es un patrón que describe un conjunto de cadenas. Las expresiones regulares se construyen de forma análoga a las expresiones aritméticas, utilizando varios operadores para combinar expresiones más pequeñas.
Grep entiende dos versiones diferentes de la sintaxis de las expresiones regulares: «básica» y «extendida». En GNU grep, no hay diferencia en la funcionalidad disponible usando cualquiera de las dos sintaxis. En otras implementaciones, las expresiones regulares básicas son menos potentes. La siguiente descripción se aplica a las expresiones regulares extendidas, que se utilizan en egrep; las diferencias para las expresiones regulares básicas se resumen a continuación.
Los bloques de construcción fundamentales son las expresiones regulares que coinciden con un solo carácter. La mayoría de los caracteres, incluyendo todas las letras y dígitos, son expresiones regulares que coinciden con ellos mismos. Cualquier metacaracter con significado especial puede ser citado precediéndolo con una barra invertida.
Una expresión regular entre corchetes es una lista de caracteres encerrados por . Coincide con cualquier carácter de esa lista; si el primer carácter de la lista es el signo de interrogación ^, entonces coincide con cualquier carácter que no esté en la lista. Por ejemplo, la expresión regular coincide con cualquier dígito simple.
Dentro de una expresión de corchetes, una expresión de rango consiste en dos caracteres separados por un guión («-«). Coincide con cualquier carácter individual que se ordene entre los dos caracteres, inclusive, utilizando la secuencia de cotejo y el conjunto de caracteres de la configuración regional. Por ejemplo, en la configuración regional C por defecto, equivale a . Muchas localizaciones ordenan los caracteres en el orden del diccionario, y en estas localizaciones a menudo no es equivalente a ; podría ser equivalente a , por ejemplo. Para obtener la interpretación tradicional de las expresiones entre corchetes, puede utilizar la configuración regional C estableciendo la variable de entorno LC_ALL con el valor C.
Por último, ciertas clases de caracteres con nombre están predefinidas dentro de las expresiones entre corchetes, como se indica a continuación. Sus nombres se explican por sí mismos, y son , , , , , , , , y . Por ejemplo, ] significa , excepto que la última forma depende de la configuración regional de C y de la codificación de caracteres ASCII, mientras que la primera es independiente de la configuración regional y del conjunto de caracteres. (Tenga en cuenta que los paréntesis en estos nombres de clase son parte de los nombres simbólicos, y deben incluirse además de los paréntesis que delimitan la lista de corchetes). La mayoría de los metacaracteres pierden su significado especial dentro de las listas. Para incluir un literal ] colóquelo primero en la lista. Del mismo modo, para incluir un literal ^ colóquelo en cualquier lugar menos el primero. Por último, para incluir un literal – colóquelo al final.
El punto . coincide con cualquier carácter simple. El símbolo \w es un sinónimo de ] y \W es un sinónimo de ].
El signo de interrogación ^ y el signo de dólar («$») son metacaracteres que coinciden respectivamente con la cadena vacía al principio y al final de una línea. Los símbolos \< y \325> coinciden respectivamente con la cadena vacía al principio y al final de una palabra. El símbolo \b coincide con la cadena vacía en el borde de una palabra, y \B coincide con la cadena vacía siempre que no esté en el borde de una palabra.
Una expresión regular puede ir seguida de uno de varios operadores de repetición:
? | El elemento precedente es opcional y se empareja como máximo una vez. |
* | El elemento precedente se emparejará cero o más veces. |
+ | El elemento precedente se emparejará una o más veces. |
{n} | El elemento precedente se empareja exactamente n veces. |
{n,} | El elemento precedente se empareja n o más veces. |
{n,m} | El elemento precedente coincide al menos n veces, pero no más de m veces. |
Dos expresiones regulares pueden concatenarse; la expresión regular resultante coincide con cualquier cadena formada por la concatenación de dos subcadenas que coinciden respectivamente con las subexpresiones concatenadas.
Dos expresiones regulares pueden unirse mediante el operador infijo |; la expresión regular resultante coincide con cualquier cadena que coincida con cualquiera de las subexpresiones.
La repetición tiene prioridad sobre la concatenación, que a su vez tiene prioridad sobre la alternancia. Una subexpresión completa puede encerrarse entre paréntesis para anular estas reglas de precedencia.
La retro-referencia \n, donde n es un solo dígito, coincide con la subcadena previamente coincidente con la enésima subexpresión entre paréntesis de la expresión regular.
En las expresiones regulares básicas los metacaracteres ?, +, {, |, (, y ) pierden su significado especial; en su lugar, utilice las versiones con barra invertida \?\+, \{, \|, \(, y \).
El egrep tradicional no soportaba el metacarácter {, y algunas implementaciones de egrep soportan \{ en su lugar, por lo que los scripts portables deberían evitar { en los patrones egrep y deberían usar para coincidir un literal {.
GNU egrep intenta soportar el uso tradicional asumiendo que { no es especial si sería el comienzo de una especificación de intervalo no válida. Por ejemplo, el comando del shell egrep ‘{1’ busca la cadena de dos caracteres {1 en lugar de informar de un error de sintaxis en la expresión regular. POSIX.2 permite este comportamiento como una extensión, pero los scripts portables deberían evitarlo.
Variables de entorno
El comportamiento de Grep se ve afectado por las siguientes variables de entorno:
Una configuración regional LC_foo se especifica examinando las tres variables de entorno LC_ALL, LC_foo, LANG, en ese orden. La primera de estas variables que se establece especifica la configuración regional. Por ejemplo, si LC_ALL no está fijada, pero LC_MESSAGES está fijada en pt_BR, entonces se utiliza el portugués brasileño para la configuración regional de LC_MESSAGES. La configuración regional C se utiliza si ninguna de estas variables de entorno está establecida, o si el catálogo de configuraciones regionales no está instalado, o si grep no fue compilado con soporte de lenguaje nacional (NLS).
GREP_OPTIONS
Esta variable especifica las opciones por defecto que se colocan delante de cualquier opción explícita. Por ejemplo, si GREP_OPTIONS es ‘–binary-files=without-match –directories=skip’, grep se comporta como si las dos opciones –binary-files=without-match y –directories=skip se hubieran especificado antes de cualquier opción explícita. Las especificaciones de las opciones están separadas por espacios en blanco. Una barra invertida escapa al siguiente carácter, por lo que puede utilizarse para especificar una opción que contenga espacios en blanco o una barra invertida.
GREP_COLOR
Especifica el marcador para el resaltado.
LC_ALL, LC_COLLATE, LANG
Estas variables especifican la localización LC_COLLATE, que determina la secuencia de cotejo utilizada para interpretar expresiones de rango como .
LC_ALL, LC_CTYPE, LANG
Estas variables especifican la localización LC_CTYPE, que determina el tipo de caracteres, por ejemplo, qué caracteres son espacios en blanco.
LC_ALL, LC_MESSAGES, LANG
Estas variables especifican la configuración regional LC_MESSAGES, que determina el idioma que grep utiliza para los mensajes. La configuración regional predeterminada de C utiliza mensajes en inglés americano.
POSIXLY_CORRECT
Si se establece, grep se comporta como requiere POSIX.2; de lo contrario, grep se comporta más como otros programas de GNU. POSIX.2 requiere que las opciones que siguen a los nombres de ficheros sean tratadas como nombres de ficheros; por defecto, tales opciones se permutan al frente de la lista de operandos y son tratadas como opciones. Además, POSIX.2 requiere que las opciones no reconocidas sean diagnosticadas como «ilegales», pero como no son realmente contrarias a la ley, el valor por defecto es diagnosticarlas como «inválidas». POSIXLY_CORRECT también desactiva _N_GNU_nonoption_argv_flags_, que se describe a continuación.
_N_GNU_nonoption_argv_flags_
(Aquí N es el ID numérico del proceso de grep.) Si el carácter ith del valor de esta variable de entorno es 1, no considere el operando ith de grep como una opción, incluso si parece serlo. Un intérprete de comandos puede poner esta variable en el entorno para cada comando que ejecute, especificando qué operandos son los resultados de la expansión de comodines de nombres de archivos y, por lo tanto, no deben ser tratados como opciones. Este comportamiento sólo está disponible con la biblioteca C de GNU, y sólo cuando POSIXLY_CORRECT no está establecido.
Ejemplos
egrep "support|help|windows" myfile.txt
Busca patrones de ayuda de soporte y ventanas en el archivo miarchivo.txt.
egrep '^+$' myfile.txt
Busca cualquier línea en miarchivo.txt que comience una línea con una palabra alfabética que también termine la línea.
egrep -c '^begin|end$' myfile.txt
Cuenta el número de líneas en miarchivo.txt que comienzan con la palabra ‘begin’ o terminan con la palabra ‘end’.
fgrep – Filtra el texto que coincide con una cadena de caracteres fijos.
grep – Filtra el texto que coincide con una expresión regular.
sed – Una utilidad para filtrar y transformar texto.
sh – El intérprete de comandos del shell Bourne.