Búsqueda de sitios web

grep vs egrep vs fgrep: ¿Cuál es la diferencia?


grep, egrep, fgrep. Todos suenan similares. Entonces, ¿cuál es la diferencia?

Creo que ya estás familiarizado con el comando grep. Puede suceder que te encuentres con términos como egrep y fgrep en alguna discusión en un foro de Internet y te preguntes qué son estos comandos y si están relacionados con grep.

En este tutorial, analizaré estas variantes de grep y explicaré las diferencias y similitudes.

¿Qué es egrep y fgrep? ¿Cuál es la diferencia entre grep, egrep y fgrep?

El e en egrep significa extendido y el f en fgrep significa fijo. egrep permite el uso de expresiones regulares extendidas y fgrep no permite ninguna expresión regular.

Todo esto pronto tendrá más sentido cuando los explique con ejemplos.

Sabes que grep funciona con expresiones regulares. Pero esa no es la verdad completa.

De forma predeterminada, el comando grep funciona con expresiones regulares básicas. Si desea una búsqueda más compleja, debe utilizar expresiones regulares extendidas. Vea la diferencia entre expresiones regulares básicas y extendidas.

El comando egrep permite el uso de expresiones regulares extendidas.

El comando fgrep, por otro lado, funciona con una cadena fija en lugar de una expresión regular. Esto significa que toma el patrón de búsqueda tal como está para la búsqueda y, por lo tanto, es más rápido que grep.

Aunque es posible que aún veas egrep y fgrep en estado salvaje, su estado está obsoleto. Muchos sistemas todavía incluyen los binarios de estas variantes.

Sin embargo, ahora es el estándar POSIX utilizar grep estándar con indicadores de opciones especiales (-E o -F). Estos indicadores ayudan al grep estándar a emular la funcionalidad de cada comando respectivo.

Para resumir:

  • egrep y fgrep son comandos obsoletos y deben evitarse.

  • egrep es equivalente al comando grep -E y permite el uso de expresiones regulares extendidas.

  • fgrep es equivalente al comando grep -F y utiliza una cadena fija para la búsqueda y, por lo tanto, realiza una búsqueda más rápida.

Comprender la diferencia entre grep, egrep y fgrep con ejemplo

He creado un archivo de texto breve para demostrar las diferencias entre estas variantes de grep.

christopher@linux-handbook:~$ cat test.txt 
this is a tasty test

Comando grep estándar

Esta es la versión estándar de grep diseñada para buscar patrones utilizando expresiones regulares básicas. El uso de grep requiere escapar de metacaracteres para generar el comportamiento esperado.

Supongamos que quiero buscar tast o test. Esto es lo que puedo usar:

christopher@linux-handbook:~$ grep 't\(a\|e\)st' test.txt

¿Notas cómo tienes que escapar del paréntesis? Esto es mucho más fácil de ver y entender con expresiones regulares extendidas.

Grep extendido: Egrep o grep -E

Egrep se creó para proporcionar soporte extendido para metacaracteres. Esto significa que escapa de estos caracteres especiales de forma predeterminada. Esto ahorra tiempo y generalmente hace que las expresiones sean más fáciles de leer.

El comando que utilicé anteriormente se puede reescribir como mucho más legible:

christopher@linux-handbook:~$ egrep 't(a|e)st' test.txt

El binario egrep no admite constantemente el carácter {. Esto puede resultar en comportamientos inesperados.

Algunas versiones de egrep permiten que se interpreten correctamente como caracteres literales si se utilizan caracteres de escape (\{). Sin embargo, la mejor práctica para hacer coincidir un { literal es encerrar entre corchetes [{].

Grep fijo: Fgrep o grep -F

Los profesionales del software saben que, incluso cuando la capacidad computacional ha aumentado profundamente, nunca se puede ignorar la optimización. Grep es una herramienta muy poderosa, pero a veces puede utilizar recursos del sistema innecesariamente.

De aquí surgió la idea de grep fijo. Este software es ideal para casos de uso en los que necesita hacer coincidir una cadena exacta.

No presenta las poderosas herramientas de expresión de las otras variantes de grep. Esa debilidad es en realidad su superpoder. Esto hace que la herramienta sea mucho más rápida.

Como mencioné anteriormente, debes evitar el uso de egrep y fgrep porque son comandos obsoletos. Usar grep -E y grep -F es el camino a seguir.

Espero que ahora comprenda mejor grep, egrep y fgrep. Si tiene algo que agregar, no dude en dejar un comentario.