Diferencia entre revisiones de «Grep»
mSin resumen de edición |
mSin resumen de edición |
||
Línea 168: | Línea 168: | ||
{{Navbox| |
{{Navbox| |
||
|name = Comandos Unix |
|name = Comandos Unix |
||
|title = Comandos Unix |
|title = Comandos Unix |
||
|group1 = Gestión de archivos |
|group1 = Gestión de archivos |
Revisión del 12:32 17 jul 2009
grep es una utilidad de la línea de comandos escrita originalmente para ser usada con el sistema operativo Unix. Usualmente, grep toma una expresión regular de la línea de comandos, lee la entrada estándar o una lista de archivos, e imprime las líneas que contengan coincidencias para la expresión regular.
Su nombre deriva de un comando en el editor de texto ed que tiene la siguiente forma:
g/re/p
y significa «hacer una búsqueda global para las líneas que encajen con la expresión regular (regular expression en inglés), e imprimirlas». Hay varios argumentos que se pueden usar con grep para modificar el comportamiento por defecto.
Existen otros retroacrónimos (incorrectos) para el nombre, entre ellos: General Regular Expression Parser (analizador general de expresiones regulares), General Regular Expression Print (imprimir expresión regular general), y Global Regular Expression Print (imprimir expresión regular global), éste último no tan lejano de la realidad.
Uso:
$ grep [opciones] [expresión regular] [archivo]
Historia
Grep es fruto de la filosofía “modular” de Unix: crear pequeños programas altamente especializados en una sola cosa, para luego utilizarlos combinados por medio de pipes. Eventualmente el programa apareció en otras encarnaciones, como por ejemplo en DOS, actuando como herramienta de apoyo a compiladores. Han existido varios intentos para darle una interfaz gráfica al programa, pero hasta ahora grep sigue siendo utilizado principalmente en líneas de comandos, mezclado con otros programas como tail, ps, y less. La versión más popular es GNU Grep, que está disponible para diversos sistemas operativos, entre ellos Microsoft Windows (en ese sistema operativo, el proyecto Gnuwin32 proporciona una versión de Grep para Windows).
Funcionamiento
Grep generalmente ejecuta alguna variante del algoritmo Boyer-Moore (para búsqueda de strings), utilizando expresiones regulares para definir la consulta. Puede manejar archivos, directorios (y subdirectorios), o la entrada estándar (stdin).
El programa es configurable por medio de opciones de invocación, pudiendo (por ejemplo) mostrar las líneas con aciertos, desaciertos, el contexto de la coincidencia, etc.
Parámetros comunes
-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, --revert-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, --revert-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 predetermi- nada, 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 car- acteres 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.
Ejemplos
Para mostrar todas las líneas que contienen la cadena «tal» en una lista de archivos (donde «*» representa todos los archivos en el directorio actual):
grep tal *
Para mostrar todas las líneas que no contengan la cadena «tal», se usa «-v»:
grep -v tal *
Para mostrar sólo el nombre de tales archivos, se usa «-l»:
grep -l tal *
Para mostrar sólo el nombre de los archivos que no contienen la cadena, se usa «-L»:
grep -L tal *
Para buscar recursivamente, no sólo en los archivos del directorio actual sino también en los de sus subdirectorios (donde "." representa el directorio actual), se usa «-r»:
grep -r tal .
La opción -r puede no estar disponible en todas las plataformas Unix.
Para buscar todas las líneas que comienzan por «Ahora» y terminan con «siempre» seguido de una cantidad arbitraria de espacio en blanco (nótese que el carácter ^ representa el inicio de la línea, así como $ representa el final):
grep '^Ahora.*siempre *$'
Para hacer que grep lea de la entrada estándar, no se especifica archivo alguno. Por ejemplo, como ps -ef
lista todos los procesos actualmente en ejecución, el siguiente comando imprime todos los procesos que está ejecutando el usuario actual:
ps -ef | grep $USER
ó:
ps -efa | grep $USER
Mostrará las cuentas de usuaros que presenten actividad en ese momento.
Variantes
Existen muchos derivados de grep; por ejemplo agrep, que significa approximate grep (grep aproximado), y sirve para hacer una búsqueda aproximada de cadenas; fgrep para buscar patrones fijos; egrep para búsquedas que involucren expresiones regulares más complejas; y tcgrep, que utiliza la sintaxis de expresiones regulares de Perl. Todas estas variantes de grep han sido llevadas a diversos sistemas operativos.
Muchos otros comandos contienen la cadena «grep». Por ejemplo pgrep, que muestra los procesos cuyos nombres encajan con cierta expresión regular.
En Perl existe la función grep, que recibe una expresión regular y una lista, y regresa los elementos de la lista que encajan con dicha expresión.
El sistema Windows tiene una utilidad llamada «findstr», que aproxima las funciones de «grep».
Véase también
Enlaces externos
- GNU grep - el grep que viene con las distribuciones GNU/Linux.
- manual de grep (en inglés).
- documentación de texinfo (en inglés).
- Documentación (en inglés).
- Grep para Windows.