Ir al contenido

Diferencia entre revisiones de «Grep»

De Wikipedia, la enciclopedia libre
Contenido eliminado Contenido añadido
Sorareader (discusión · contribs.)
mSin resumen de edición
Sorareader (discusión · contribs.)
mSin resumen de edición
Línea 168: Línea 168:
{{Navbox|
{{Navbox|
|name = Comandos Unix
|name = Comandos Unix
|title = Comandos Unix - ([[Guia de comandos para Linux/Unix|lista]])
|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