Autor(es) original(es) | Ken Thompson [1] [2] |
---|---|
Desarrollador(es) | Laboratorios Bell de AT&T |
Lanzamiento inicial | Noviembre de 1973 ( 1973-11 ) | [1]
Escrito en | do |
Sistema operativo | Unix , similar a Unix , Plan 9 , Inferno , OS-9 , MSX-DOS , IBM i |
Plataforma | Multiplataforma |
Tipo | Dominio |
grep
es una utilidad de línea de comandos para buscar conjuntos de datos de texto sin formato en busca de líneas que coincidan con una expresión regular . Su nombre proviene del comando edg/re/p
(búsqueda e impresión de expresiones regulares globales), que tiene el mismo efecto. [3] [4] grep
se desarrolló originalmente para el sistema operativo Unix , pero luego estuvo disponible para todos los sistemas similares a Unix y algunos otros como OS-9 . [5]
Antes de que se le pusiera nombre, grep era una utilidad privada escrita por Ken Thompson para buscar determinados patrones en los archivos. Doug McIlroy , que desconocía su existencia, le pidió a Thompson que escribiera un programa de este tipo. Thompson respondió que pensaría en una utilidad de este tipo durante la noche, y en realidad corrigió errores e hizo mejoras durante aproximadamente una hora en su propio programa llamado s
(abreviatura de "search"). Al día siguiente, presentó el programa a McIlroy, quien dijo que era exactamente lo que quería. El relato de Thompson puede explicar la creencia de que grep se escribió de la noche a la mañana. [6]
Thompson escribió la primera versión en lenguaje ensamblador PDP-11 para ayudar a Lee E. McMahon a analizar el texto de The Federalist Papers para determinar la autoría de los documentos individuales. [7] El editor de texto ed (también creado por Thompson) tenía soporte para expresiones regulares pero no podía usarse para buscar en una cantidad tan grande de texto, ya que cargaba el archivo completo en la memoria para permitir la edición de acceso aleatorio , por lo que Thompson extrajo ese código de expresión regular en una herramienta independiente que, en cambio, procesaría archivos arbitrariamente largos de forma secuencial sin almacenar demasiado en la memoria. [1] Eligió el nombre porque en ed, el comando g/re/p imprimiría todas las líneas que presentaran una coincidencia de patrón especificada. [8] [9] se incluyó por primera vez en la versión 4 de Unix . Al afirmar que "generalmente se cita como la herramienta de software prototípica", McIlroy le atribuye el mérito de "inculcar irrevocablemente" la filosofía de herramientas de Thompson en Unix. [10] grep
grep
Hay una variedad de grep
implementaciones disponibles en muchos sistemas operativos y entornos de desarrollo de software. [11] Las primeras variantes incluyeron egrep
y fgrep
, introducidas en la versión 7 de Unix . [10] La egrep
variante " " admite una sintaxis de expresión regular extendida agregada por Alfred Aho después de la implementación de expresión regular original de Ken Thompson . [12] La fgrep
variante " " busca cualquiera de una lista de cadenas fijas utilizando el algoritmo de coincidencia de cadenas Aho-Corasick . [13] Los binarios de estas variantes existen en los sistemas modernos, generalmente enlazando grep
o llamando a grep como un script de shell con el indicador apropiado agregado, por ejemplo exec grep -E "$@"
. egrep
y fgrep
, aunque se implementan comúnmente en sistemas POSIX, hasta el punto en que la especificación POSIX menciona su existencia generalizada, en realidad no son parte de POSIX. [14]
Otros comandos contienen la palabra "grep" para indicar que son herramientas de búsqueda, normalmente aquellas que se basan en coincidencias de expresiones regulares. La pgrep
utilidad, por ejemplo, muestra los procesos cuyos nombres coinciden con una expresión regular dada. [15]
En el lenguaje de programación Perl , grep es el nombre de la función incorporada que encuentra elementos en una lista que satisfacen una determinada propiedad. [16] Esta función de orden superior normalmente se denomina filter
o where
en otros lenguajes.
El pcregrep
comando es una implementación de grep
que utiliza la sintaxis de expresión regular de Perl . [17] Se puede invocar una funcionalidad similar en la versión GNU de grep
con el -P
indicador. [18]
Los puertos de grep
(dentro de Cygwin y GnuWin32 , por ejemplo) también funcionan en Microsoft Windows . Algunas versiones de Windows cuentan con el comando qgrep
or similar . [19]findstr
Un grep
comando también es parte de las herramientas MSX-DOS2 de ASCII para MSX-DOS versión 2. [20]
Los comandos grep , egrep y fgrep también se han portado al sistema operativo IBM i . [21]
El software Adobe InDesign tiene funciones GREP (desde la versión CS3 (2007) [22] ), en el cuadro de diálogo buscar/cambiar [23] pestaña “GREP”, e introducidas con InDesign CS4 [24] en los estilos de párrafo [25] “Estilos GREP”.
Un grep (grep aproximado) coincide incluso cuando el texto sólo se ajusta aproximadamente al patrón de búsqueda. [26]
La siguiente invocación encuentra máscaras de red en el archivo myfile , pero también cualquier otra palabra que pueda derivarse de él, dadas no más de dos sustituciones.
agrep -2 máscaras de red miarchivo
Este ejemplo genera una lista de coincidencias con las más cercanas, es decir, las que tienen menos sustituciones, listadas primero. El indicador de comando B significa mejor :
agrep -B máscaras de red miarchivo
En diciembre de 2003, el Oxford English Dictionary Online añadió "grep" como sustantivo y verbo. [27]
Un uso común del verbo es la frase "No se puede buscar en árboles muertos", lo que significa que es más fácil buscar en medios digitales, usando herramientas como grep
, que con una copia impresa (es decir, una hecha de "árboles muertos", que en este contexto es un disfemismo para el papel). [28]
grep
grep
grep
"QGREP.EXE[:] Una herramienta similar a grep en UNIX, esta herramienta se puede utilizar para buscar una cadena de texto.