grep es una utilidad de línea de comandos para buscar en un texto líneas que coincidan con una expresión regular . Su nombre proviene del comando ed ( global , regular e xpression, print ), que tiene el mismo efecto. [ 3 ] [ 4 ] grep se desarrolló originalmente para el sistema operativo Unix y está comúnmente disponible en sistemas tipo Unix y algunos otros sistemas como OS-9 . [ 5 ] El comando de shell que ejecuta la utilidad tiene el mismo nombre: .g/re/pgrep
Historia
Antes de recibir su nombre, grep era una utilidad privada escrita por Ken Thompson para buscar ciertos patrones en archivos. Doug McIlroy , sin saber de su existencia, le pidió a Thompson que escribiera un programa similar. Thompson respondió que pensaría en dicha utilidad durante la noche, pero en realidad corrigió errores e hizo mejoras durante aproximadamente una hora en su propio programa llamado s(abreviatura de "search"). Al día siguiente, le presentó el programa a McIlroy, quien dijo que era exactamente lo que quería. El relato de Thompson podría 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 los Papeles Federalistas y determinar la autoría de cada uno. [ 7 ] El editor de texto ed (también escrito 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 todo el archivo en la memoria para permitir la edición de acceso aleatorio . Por lo tanto, Thompson extrajo ese código de expresiones regulares 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 , donde es la expresión regular a coincidir, imprimiría todas las líneas que presentaran una coincidencia de patrón específica. [ 8 ] [ 9 ] grep se incluyó por primera vez en la versión 4 de Unix . Afirmando que se "generalmente se cita como la herramienta de software prototípica", McIlroy atribuyó a grep el haber "inculcado irrevocablemente" la filosofía de herramientas de Thompson en Unix. [ 10 ]g/re/pre
Implementaciones
Existen diversas implementaciones de grep en muchos sistemas operativos y entornos de desarrollo de software. [ 11 ] Las primeras variantes incluían egrepy fgrep, introducidas en la versión 7 de Unix . [ 10 ] La egrepvariante admite una sintaxis de expresiones regulares extendida añadida por Alfred Aho después de la implementación original de expresiones regulares de Ken Thompson . [ 12 ] La fgrepvariante busca cualquiera de una lista de cadenas fijas utilizando el algoritmo de coincidencia de cadenas de Aho-Corasick . [ 13 ] Existen binarios de estas variantes en sistemas modernos, que generalmente se enlazan con grep o llaman a grep como un script de shell con la bandera apropiada añadida, por ejemplo . Los comandos y , aunque se implementan comúnmente en sistemas POSIX , hasta el punto de que la especificación POSIX menciona su existencia generalizada, en realidad no forman parte de POSIX. [ 14 ]execgrep-E"$@"egrepfgrep
Otros comandos contienen la palabra "grep" para indicar que son herramientas de búsqueda, generalmente aquellas que se basan en coincidencias de expresiones regulares. La pgreputilidad, por ejemplo, muestra los procesos cuyos nombres coinciden con una expresión regular dada. [ 15 ]
En el lenguaje de programación Perlgrep , es una función integrada que encuentra elementos en una lista que satisfacen una determinada propiedad. [ 16 ] Esta función de orden superior se denomina normalmente filtero whereen otros lenguajes.
El pcregrepcomando es una implementación de grep que utiliza la sintaxis de expresiones regulares de Perl . [ 17 ] Se puede invocar una funcionalidad similar en la versión GNU de grep con la -Pbandera. [ 18 ]
Las versiones de grep (dentro de Cygwin y GnuWin32 , por ejemplo) también se ejecutan en Microsoft Windows . Algunas versiones de Windows incluyen el comando similar qgrepo . [ 19 ]findstr
El comando grep también forma parte de las herramientas MSX-DOS2 de ASCII para MSX-DOS versión 2. [ 20 ]
Los comandos grep, egrep, y fgreptambié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".
agrep
agrep(aproximate grep) es un programa de búsqueda aproximada de cadenas de código abierto , desarrollado por Udi Manber y Sun Wu entre 1988 y 1991, [ 26 ] para su uso con el sistema operativo Unix . Posteriormente fue portado a OS/2 , DOS y Windows .
Un grep encuentra coincidencias incluso cuando el texto solo se ajusta aproximadamente al patrón de búsqueda. [ 27 ]
Esta siguiente invocación encuentra netmasksen el archivo myfile, pero también cualquier otra palabra que se pueda derivar de él, con no más de dos sustituciones.
agrep -2 netmasks myfile
Este ejemplo genera una lista de coincidencias con las más cercanas, es decir, aquellas con menos sustituciones, listadas primero. El indicador de comando -Bsignifica "mejor":
agrep -B netmasks myfile
Uso como verbo
En diciembre de 2003, el Oxford English Dictionary Online añadió "grep" como sustantivo y verbo. [ 28 ]
Un uso común del verbo es la frase "No se puede buscar en árboles muertos", lo que significa que se puede buscar más fácilmente en medios digitales, utilizando herramientas como grep, que en una copia impresa (es decir, una hecha de "árboles muertos", que en este contexto es un disfemismo para el papel). [ 29 ]
Véase también
- agrep : un comando de coincidencia de cadenas aproximada
- Algoritmo de búsqueda de cadenas de Boyer-Moore : algoritmo de búsqueda utilizado en grep.
- find (Unix) – un comando de Unix que busca archivos en lugar de texto.
- find (Windows) o findstr : un comando de DOS/Windows que busca texto en archivos, de forma similar a grep.
- Lista de comandos POSIX
- ngrep – el grep de red
- vgrep : un término humorístico para la inspección visual.
Referencias
- 1 2 3 Kernighan , Brian (1984). El entorno de programación Unix . Prentice Hall. pp. 102. ISBN 0-13-937681-X.
- ↑ “grep fue un comando privado mío durante bastante tiempo antes de hacerlo público.” -Ken Thompson Archivado el 26/05/2015 en Wayback Machine , por Benjamin Rualthanzauva, publicado el 5 de febrero de 2014, Medium
- ↑ Hauben, Michael ; Hauben, Ronda (1997). «Sobre la historia temprana y el impacto de las herramientas Unix para construir las herramientas para un nuevo milenio». Netizens: On the History and Impact of Usenet and the Internet . Los Alamitos, California: IEEE Computer Society Press. ISBN 978-0-8186-7706-9pág. 136:
Una tarde le pregunté a Ken Thompson si podía extraer el reconocedor de expresiones regulares del editor y crear un programa de una sola pasada para hacerlo. Dijo que sí. A la mañana siguiente encontré una nota en mi correo anunciando un programa llamado grep. Funcionó de maravilla. Cuando le pregunté qué significaba ese nombre tan peculiar, Ken dijo que era obvio. Significaba el comando del editor que simulaba, g/re/p (impresión global de expresiones regulares).
- ↑ Raymond, Eric . "grep" . Archivo de jerga . Archivado del original el 17-06-2006 . Recuperado el 29-06-2006 .
- ↑ Paul S. Dayan (1992). El gurú del OS-9 - 1 : Los hechos . Galactic Industrial Limited. ISBN 0-9519228-0-7.
- ↑ VCF East 2019: Brian Kernighan entrevista a Ken Thompson (video). YouTube. 6 de mayo de 2019. Archivado del original el 11 de diciembre de 2021.(35 minutos)
- ↑ Computerphile, De dónde surgió GREP ( Archivado el 11/11/2018 en Wayback Machine) , entrevista con Brian Kernighan
- ↑ "ed regexes" . perl.plover.com . Archivado del original el 20 de octubre de 2017. Recuperado el 24 de abril de 2018 .
- ↑ "Cómo Grep obtuvo su nombre" . robots.thoughtbot.com . Archivado del original el 9 de agosto de 2017. Consultado el 24 de abril de 2018 .
- 1 2 McIlroy, MD (1987). Un lector de Research Unix: extractos anotados del Manual del programador, 1971–1986 (PDF) (Informe técnico). CSTR. Bell Labs. 139. Archivado (PDF) del original el 11/11/2017.
- ↑ Abou-Assaleh, Tony; Wei Ai (marzo de 2004). Estudio de herramientas globales de impresión de expresiones regulares (GREP) (Informe técnico). Universidad de Dalhousie.
- ↑ Hume, Andrew (1988). "Una historia de dos Greps". Software: Práctica y experiencia . 18 (11): 1063. doi : 10.1002/spe.4380181105 . S2CID 6395770 .
- ↑ Meurant, Gerard (12 de septiembre de 1990). Algoritmos y complejidad . Elsevier Science. pág. 278. ISBN 9780080933917Archivado del original el 4 de marzo de 2016. Consultado el 12 de diciembre de 2015 .
- ↑ "grep" . www.pubs.opengroup.org . The Open Group. Archivado del original el 28 de noviembre de 2015. Consultado el 12 de diciembre de 2015 .
- ↑ "pgrep(1)" . www.linux.die.net . Archivado del original el 22 de diciembre de 2015 . Recuperado el 12 de diciembre de 2015 .
- ↑ "grep" . www.perldoc.perl.org . Archivado del original el 7 de diciembre de 2015. Consultado el 12 de diciembre de 2015 .
- ↑ "página man de pcregrep" . www.pcre.org . Universidad de Cambridge. Archivado del original el 23 de diciembre de 2015. Consultado el 12 de diciembre de 2015 .
- ↑ "grep(1)" . www.linux.die.net . Archivado del original el 10 de diciembre de 2015 . Recuperado el 12 de diciembre de 2015 .
- ↑ Spalding, George (2000). Administración de Windows 2000. Biblioteca para profesionales de redes. Osborne/McGraw-Hill. 634 págs . ISBN 978-0-07-882582-8. Recuperado el 10-12-2010 .
QGREP.EXE[:] Una herramienta similar a grep en UNIX, esta herramienta se puede utilizar para buscar una cadena de texto
- ↑ "Manual de usuario de las herramientas MSX-DOS2 de ASCII Corporation" . Abril de 1993.
- ↑ IBM . "IBM System i Versión 7.2 Programación Qshell" (PDF) . IBM . Archivado (PDF) del original el 18-09-2020 . Recuperado el 05-09-2020 .
- ↑ "Reseña: Adobe InDesign CS3 - CreativePro.com" . creativepro.com . 20 de abril de 2007. Archivado del original el 5 de enero de 2018. Consultado el 24 de abril de 2018 .
- ↑ "Ayuda de InDesign: buscar/cambiar" . Archivado del original el 28/08/2016 . Consultado el 12/08/2016 .
- ↑ "InDesign: Estilos GREP (1) Poner texto entre paréntesis en cursiva" . Archivado del original el 24/09/2017 . Consultado el 05/01/2018 .
- ↑ "Ayuda de InDesign: Estilos GREP" . Archivado del original el 28/08/2016 . Consultado el 12/08/2016 .
- ↑ Wu, Sun; Manber, Udi (20–24 de enero de 1992). Agrep: una herramienta rápida de coincidencia aproximada de patrones . Conferencia USENIX de invierno de 1992. San Francisco, California. CiteSeerX 10.1.1.89.5424 .
- ↑ S. Lee Henry (junio de 1998). "Búsqueda adecuada". Sun Expert . págs. 35–26 .
- ↑ "Lista de palabras nuevas de diciembre de 2003" . Oxford English Dictionary . Archivado del original el 24 de julio de 2023. Consultado el 6 de diciembre de 2021 .
- ↑ Archivo de jerga , artículo "Documentación"
- Notas
- Alain Magloire (agosto de 2000). Grep: Búsqueda de patrones . Iuniverse Inc. ISBN 0-595-10039-2.
- Hume, Andrew (1988). Collinson, Peter (ed.). «Guerras de Grep: La iniciativa de búsqueda estratégica». Actas de la Conferencia EUUG Primavera 88. Buntingford, Reino Unido: Grupo Europeo de Usuarios de UNIX: 237–245 .
Enlaces externos
- Sitio web oficial de GNU Grep
- Manual de GNU Grep
- – Manual del programador de Plan 9 , Volumen 1
- – Manual de comandos generales de Inferno
- "Por qué GNU grep es rápido" : detalles de implementación del autor de GNU grep.
- Comando Grep: 25 ejemplos prácticos
- utilidades de procesamiento de texto de Unix
- Utilidades Unix SUS2008
- Programas estándar de Unix
- Órdenes del Plan 9
- Comandos de Inferno (sistema operativo)
- Comandos de Qshell para IBM i