GNU/Linux >> Tutoriales Linux >  >> Linux

¡Explicado! La diferencia entre los comandos grep, egrep y fgrep

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 me pregunto cuáles son estos comandos y si están relacionados con grep.

En este tutorial, analizaré estas variantes de grep explicando la diferencia y las similitudes.

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

El e en egrep significa extendido y f en fgrep significa fijo. egrep permite el uso de expresiones regulares extendidas y fgrep no permite expresiones regulares en absoluto.

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

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

De forma predeterminada, el comando grep funciona en expresiones regulares básicas. Si desea una búsqueda más compleja, debe usar una expresión regular extendida. 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 en una cadena fija en lugar de una expresión regular. Esto significa que toma el patrón de búsqueda tal como es para buscar y, por lo tanto, es más rápido que grep.

Aunque, aún puede ver egrep y fgrep en la naturaleza, su estado está obsoleto. Muchos sistemas todavía incluyen los binarios para estas variantes.

Sin embargo, ahora es el estándar POSIX usar grep estándar con indicadores de opciones especiales (-E o -F ). Estas banderas ayudan a 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 a grep -E y permite el uso de expresiones regulares extendidas.
  • fgrep es equivalente a grep -F comando y usa 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.

[email protected]:~$ 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 metacaracteres de escape para generar el comportamiento esperado.

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

[email protected]:~$ 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 servicios extendidos soporte para meta-caracteres. Esto significa que escapa estos caracteres especiales por defecto. Esto ahorra tiempo y generalmente hace que las expresiones sean más fáciles de leer.

El comando que usé arriba se puede reescribir como mucho más legible:

[email protected]:~$ egrep 't(a|e)st' test.txt

El binario egrep no soporta consistentemente el { personaje. Esto puede resultar en comportamientos inesperados.

Algunas versiones de egrep permiten que se interpreten correctamente como caracteres literales si se escapan (\{ ). 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 aunque la capacidad computacional ha aumentado considerablemente, nunca se puede ignorar la optimización. Grep es una herramienta muy poderosa, pero a veces puede usar los recursos del sistema innecesariamente.

Aquí es donde 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, debe evitar usar egrep y fgrep porque son comandos obsoletos. Usando grep -E y grep -F es el camino a seguir.

Espero que ahora tenga una mejor comprensión de grep, egrep y fgrep. Si tiene algo que agregar, no dude en dejar un comentario.


Linux
  1. Aprenda la diferencia entre los comandos "su" y "su -" en Linux

  2. ¿Cuál es la diferencia entre InnoDB y MyISAM?

  3. ¿Cuál es la diferencia entre Sudo Su y Sudo Su?

  4. ¿La diferencia entre Getty y Agetty?

  5. La diferencia entre '$ . Foo' y '$ ./foo'??

La diferencia entre sudo y su explicada

¿Cuál es la diferencia entre Linux y Unix?

La diferencia entre más, menos y la mayoría de los comandos

Explicación de la diferencia entre apt y apt-get

¿Cuál es la diferencia entre los comandos kill y killall?

¿Cuál es la diferencia entre unlink y rm?