Grep es un extendido método, ca­ra­c­te­ri­za­do por su sencillez, que se usa con Linux para buscar o filtrar archivos por cadenas es­pe­cí­fi­cas. El comando de Linux sigue una sintaxis uniforme y facilita la búsqueda mediante pa­rá­me­tros definidos.

¿Qué es grep?

Grep es la abre­via­tu­ra de “búsqueda global para las líneas que encajen con la expresión regular (regular expression en inglés) e im­pri­mi­r­las (print en inglés). Como el programa está incluido en el paquete esencial de Ubuntu, no es necesario in­s­ta­lar­lo por separado. Los comandos grep se utilizan para buscar patrones y cadenas. Esto permite filtrar la in­fo­r­ma­ción que se busca incluso en archivos de registro de gran tamaño. Es im­po­r­ta­n­te que nunca se ejecute grep para los archivos de di­s­po­si­ti­vos, ya que esto puede conducir a problemas.

¿Cómo se utiliza grep?

La sintaxis básica de grep es la siguiente: “grep [Opciones] Cadena de búsqueda [ARCHIVO]” o, como al­te­r­na­ti­va, “grep [Opciones] [-e Ejemplo | -f ARCHIVO] [ARCHIVO]”. Un ejemplo sencillo de un comando grep en Linux sería buscar un término es­pe­cí­fi­co en el texto de un archivo de código o de registro. Si quieres buscar el término “test” en un archivo llamado ejemplo.txt, introduce lo siguiente en grep: "grep "test" ejemplo.txt". Ahora se mostrarán las líneas co­rre­s­po­n­die­n­tes en este archivo.

Ex­pre­sio­nes regulares como fu­n­da­me­n­to de grep

La base de este proceso son las llamadas “ex­pre­sio­nes regulares” en Linux. Estas “ex­pre­sio­nes regulares” están di­s­po­ni­bles en las variantes básica y extendida; esta última es im­po­r­ta­n­te para grep. Las ex­pre­sio­nes regulares pueden uti­li­zar­se para buscar ca­ra­c­te­res in­di­vi­dua­les o cadenas de ca­ra­c­te­res. También es posible ide­n­ti­fi­car una letra o un dígito, aunque forme parte de una cadena de ca­ra­c­te­res. En el ejemplo del número “2”, el comando no solo en­co­n­tra­ría el “2”, sino también cadenas como “1234”, “y2k” o “number2”.

Hay ca­ra­c­te­res en grep que cumplen una función en la búsqueda. Por ejemplo, el signo de dólar “$” encuentra el final de una línea. Estos ca­ra­c­te­res pueden buscarse por separado uti­li­za­n­do un comando es­pe­cí­fi­co en grep. Para ello, el carácter debe ir precedido de una barra invertida. Si buscas un punto “.” como signo de pu­n­tua­ción en un archivo, puedes hacerlo con la co­m­bi­na­ción “\.”.

Listas en grep

Las listas de di­fe­re­n­tes ca­ra­c­te­res, llamadas “ex­pre­sio­nes de corchetes”, también pueden filtrarse con grep. Para la lista de ca­ra­c­te­res que deben incluirse en la consulta de búsqueda, utiliza dos corchetes “[]”. Por ejemplo, si quieres buscar todas las letras “e” en ma­yú­s­cu­las o mi­nú­s­cu­las, utiliza la opción de búsqueda “[Ee]”. Por sí misma, esta entrada en­co­n­tra­rá todas las letras “e”. Sin embargo, si la combinas, también puede filtrar palabras o fra­g­me­n­tos de texto con una “e” mayúscula o minúscula. Por ejemplo, si in­tro­du­ces “[Ee]nd” en grep, este no solo en­co­n­tra­rá el término “End” en minúscula y mayúscula, sino también fra­g­me­n­tos de texto con una “e” minúscula, como “distend”.

Además, grep te ofrece la po­si­bi­li­dad de excluir ciertos dígitos de una lista durante una búsqueda y solo buscar aquellos que no fueron excluidos de antemano. Para ello, se coloca un “^” delante. “^Ee”, por ejemplo, tiene en cuenta todos los ca­ra­c­te­res excepto la “E” y la “e”.

Con la ayuda de algunas listas pre­de­fi­ni­das, grep en Linux ahorra pasos. Cada una de estas listas pre­de­fi­ni­das se encierra entre corchetes adi­cio­na­les, es decir, [[:exam­plee­li­st:]]. Las listas pre­de­fi­ni­das son:

  • [:alnum:]: incluye todos los dígitos [:digit:] y letras [:alpha:]
  • [:alpha:]: incluye todas las letras ma­yú­s­cu­las [:upper:] y mi­nú­s­cu­las [:lower:]
  • [:blank:] incluye todos los espacios por barra es­pa­cia­do­ra o tabulador
  • [:cntrl:]: incluye todos los ca­ra­c­te­res de control
  • [:digit:]: incluye todas las cifras de 0 a 9
  • [:graph:]: incluye todos los ca­ra­c­te­res gráficos [:alnum:] y [:punct:]
  • [:lower:]: contiene todas las letras mi­nú­s­cu­las
  • [:print:]: incluye todos los ca­ra­c­te­res im­pri­mi­bles [:alnum:], [:punct:] y [:space:]
  • [:punct:]: incluye todos los signos de pu­n­tua­ción y ca­ra­c­te­res es­pe­cia­les
  • [:space:]: incluye todos los ca­ra­c­te­res que crean un espacio en blanco, como espacios o saltos de línea
  • [:upper:]: contiene todas las letras ma­yú­s­cu­las

Ejemplos de comandos grep útiles

Uti­li­za­dos co­rre­c­ta­me­n­te, los comandos grep ayudan a realizar búsquedas en archivos grandes. Existen numerosos pa­rá­me­tros con los que puedes es­pe­ci­fi­car tu búsqueda para que grep realmente solo ide­n­ti­fi­que aquellos ca­ra­c­te­res o líneas que necesitas. Estos están marcados con un “-“. He aquí algunos ejemplos útiles:

  • -c: con -c o -count, grep no busca el patrón de búsqueda dado, sino que indica en cuántas líneas se encontró el patrón de búsqueda. El comando grep "grep -c “test” ejemplo.txt" cuenta así en cuántas líneas aparece “test” y te muestra el número.
  • -l: si quieres saber en qué archivo se ha en­co­n­tra­do un de­te­r­mi­na­do término de búsqueda, utiliza la opción “-l” (L minúscula). Con el comando grep “grep -l “test” \N-.txt” puedes consultar todos los archivos que contengan el término o la cadena de ca­ra­c­te­res “test”.
  • -i: con -i se ignoran las ma­yú­s­cu­las y mi­nú­s­cu­las en la búsqueda. “grep -i “test” ejemplo.txt” muestra así todas las líneas que contienen “test” y “Test”.

Grep está di­s­po­ni­ble en otras tres variantes

Además de la versión regular de grep, existen otras tres variantes. egrep co­rre­s­po­n­de en gran medida a grep -E y trata los patrones es­pe­ci­fi­ca­dos como ex­pre­sio­nes regulares ex­te­n­di­das. fgrep co­rre­s­po­n­de en gran medida a grep -F y busca es­pe­cí­fi­ca­me­n­te los pa­rá­me­tros de los patrones. Los ca­ra­c­te­res que se leen como parte de una expresión regular en otros comandos son in­te­r­pre­ta­dos por fgrep en su si­g­ni­fi­ca­do literal sin la función adicional. Los ejemplos incluyen “$”, “*” o “\”. rgrep co­rre­s­po­n­de a grep -r y también tiene en cuenta los su­b­di­re­c­to­rios.

Ir al menú principal