grep

De Wikipedia, la enciclopedia libre
grep
línea de comandos
Información general
Tipo de programa Comando
Autor Ken Thompson
Desarrollador AT&T Bell Laboratories
Lanzamiento inicial 00 de noviembre de 1974
Estado actual En desarrollo
Versiones
Última versión estable 3.7 (info) ( 14 de agosto de 2021 (2 años, 8 meses y 12 días))
Enlaces

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 (print en inglés)».[1]​ 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), este último no tan lejano de la realidad.

Sintaxis[editar]

$ grep [opciones] [expresión regular] [archivo]

Historia[editar]

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 tuberías. 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 GNU/Linux, y existe el proyecto Gnuwin32, que proporciona una versión de grep para Windows.[2]

Funcionamiento[editar]

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.

Ejemplos[editar]

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 .

En solaris no funciona el parámetro -r. Para obtener la misma funcionalidad, se debe utilizar además el comando «find» y el comando «exec» (Recordemos, el parámetro «-l» mostrará únicamente el nombre del archivo que contenga la cadena "tal"):

$ find . -name "*.*" -exec grep -l "tal" {} \;

La opción -r puede no estar disponible en todas las plataformas Unix. Se debe utilizar así:

$ find . -type f | xargs grep tal .

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

o

$ ps -efa | grep $USER

Mostrará las cuentas de usuarios que presenten actividad en ese momento.

Variantes[editar]

Existen muchos derivados de grep; por ejemplo agrep, que significa approximate grep (grep aproximado), que 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 devuelve los elementos de la lista que encajan con dicha expresión.

El sistema Windows tiene una utilidad llamada «findstr», que se aproxima a las funciones de «grep».

El programa de maquetación Adobe InDesign también incluye las funcionalidades de GREP (desde 2007 con la versión CS3 en adelante), en los apartados de "Expresiones GREP" (en buscar y cambiar[3]​) y "Estilos GREP" (en estilos de párrafo[4]​).

Referencias[editar]

  1. Cassel, David (22 de julio de 2018). «Brian Kernighan Remembers the Origins of ‘grep’» (html). The New Stack (en inglés). Archivado desde el original el 23 de julio de 2018. Consultado el 25 de julio de 2018. «ed let you specify regular expressions, which appeared between slashes, along with some operations (specified outside those slashes) to perform on the lines which matched. The operations were often indicated with a single letter, like ‘p’ for print or ‘a’ for append. And there was also a ‘g’ flag which stood for global and would perform a command not just on one line, but on every line of a file (that matched the specified regular expression). For example, that print command, “p”. And if you wrote out that command — with g for “global” and p for “print”, applying it to a regular expression between the slashes — it would look like this: g/re/p». 
  2. grep para Windows
  3. «Ayuda de InDesign: buscar/cambiar». Consultado el 12 de agosto de 2016. 
  4. «Ayuda de InDesign: Estilos GREP». Consultado el 12 de agosto de 2016. 

Véase también[editar]

Enlaces externos[editar]