Búsqueda de sitios web

¿Cuál es la diferencia entre Grep, Egrep y Fgrep en Linux?


Una de las herramientas de búsqueda más reconocidas en sistemas tipo Unix que se puede utilizar para buscar cualquier cosa, ya sea un archivo, una línea o varias líneas en un archivo, es la utilidad grep. Tiene una funcionalidad muy amplia que se puede atribuir a la gran cantidad de opciones que admite, como: búsqueda mediante patrón de cadena, patrón reg-ex o reg-ex basado en perl, etc.

Debido a sus diversas funcionalidades, tiene muchas variantes que incluyen grep, egrep (GREP extendido), fgrep (GREP fijo), pgrep (GREP de proceso), rgrep (GREP recursivo), etc. Pero estas variantes tienen diferencias menores con el grep original, lo que las ha hecho populares y utilizadas por varios programadores de Linux para tareas específicas.

Lo principal que queda por investigar es cuáles son las diferencias entre las tres variantes principales, es decir, 'grep', 'egrep' y 'fgrep'. de grep que hace que los usuarios de Linux elijan una u otra versión según el requisito.

Algunos metacaracteres especiales de grep

  1. +: equivalente a una o más apariciones del carácter anterior.
  2. ?: esto denota casi 1 repetición del carácter anterior. Como: a? Coincidiría con ‘a’ o ‘aa’.
  3. ( – Inicio de la expresión de alternancia.
  4. ) – Fin de la expresión de alternancia.
  5. |: coincide con cualquiera de las expresiones separadas por '|'. Por ejemplo: “(a|b)cde ” coincidiría con ‘abcde’ o ‘bbcde’.
  6. {: este metacarácter indica el inicio del especificador de rango. Como: “a{2} ” coincide con “aa ” en el archivo, es decir, 2 veces.
  7. }: este metacarácter indica el final del especificador de rango.

Diferencias entre grep, egrep y fgrep

Algunas diferencias principales entre grep, egrep y fgrep se pueden destacar a continuación. Para este conjunto de ejemplos, asumimos que el archivo en el que se realiza la operación es:

comando grep

grep o Global Regular Expression Print es el principal programa de búsqueda en sistemas tipo Unix que puede buscar cualquier tipo de cadena en cualquier archivo o lista de archivos o incluso la salida de cualquier dominio.

Lectura sugerida: 12 ejemplos prácticos del comando grep de Linux

Utiliza Expresiones regulares básicas además de cadenas normales como patrón de búsqueda. En Expresiones Regulares Básicas (BRE), metacaracteres como: '{','}','(',')','|','+','?' pierden su significado y se tratan como caracteres normales de cadena y deben escaparse si se van a tratar como caracteres especiales. .

Lectura sugerida: 11 comandos avanzados 'Grep' en clases de caracteres y expresiones entre corchetes

Además, grep utiliza el algoritmo Boyer-Moore para buscar rápidamente cualquier cadena o expresión regular.

grep -C 0 '(f|g)ile' check_file
grep -C 0 '\(f\|g\)ile' check_file

Como aquí, cuando el comando se ejecuta sin escapar '(' ')' y '|', entonces busca la cadena completa, es decir, “(f|g )ile ” en el archivo. Pero cuando se escaparon los caracteres especiales, en lugar de tratarlos como parte de una cadena, grep los trató como metacaracteres y buscó las palabras “file ” o “gile ” en el archivo.

Comando Egrep

Egrep o grep -E es otra versión de grep o grep extendido. Esta versión de grep es eficiente y rápida cuando se trata de buscar un patrón de expresión regular, ya que trata los metacaracteres tal cual y no los sustituye como cadenas como en grep y, por lo tanto, se libera de la carga de escapar de ellos como en grep. Utiliza ERE o el conjunto de expresiones regulares extendidas.

En el caso de egrep, incluso si no escapa de los metacaracteres, los tratará como caracteres especiales y los sustituirá por su significado especial en lugar de tratarlos como parte de una cadena.

egrep -C 0 '(f|g)ile' check_file
egrep -C 0 '\(f\|g\)ile' check_file

Como aquí, egrep buscó la cadena “file ” cuando los metacaracteres no estaban escapados como lo significaría el significado de estos caracteres. Pero, cuando se escaparon estos caracteres, egrep los trató como parte de una cadena y buscó la cadena completa “(f|g)ile ” en el archivo.

Comando fgrep

Fgrep o Fixed grep o grep -F es otra versión más de grep que es rápida en la búsqueda cuando se trata de buscar la cadena completa en lugar de expresión regular, ya que no reconoce las expresiones regulares ni los metacaracteres. Para buscar cualquier cadena directa, esta es la versión de grep que se debe seleccionar.

Fgrep busca una cadena completa y ni siquiera reconoce caracteres especiales como parte de una expresión regular, incluso si se escaparon o no.

fgrep -C 0 '(f|g)ile' check_file
fgrep -C 0 '\(f\|g\)ile' check_file

Por ejemplo, cuando no se escaparon los metacaracteres, fgrep buscó la cadena completa “(f|g)ile ” en el archivo, y cuando se escaparon los metacaracteres, el comando fgrep buscó “\(f\|g\)ile ” todos los caracteres tal como están en el archivo.

Ya hemos cubierto algunos ejemplos prácticos del comando grep. Puede leerlos aquí si desea aprovechar al máximo el comando grep en Linux.

Aprenda 12 ejemplos prácticos del comando grep de Linux

Conclusión

Arriba se resaltan las diferencias entre 'grep', 'egrep' y 'fgrep'. Aparte de la diferencia en el conjunto de expresiones regulares utilizadas y la velocidad de ejecución, los parámetros de la línea de comando rest siguen siendo los mismos para las tres versiones de grep e incluso en lugar de “egrep” o “fgrep”, “grep -E” o “grep - Se recomienda utilizar F”.

Si encuentra otras diferencias entre estas tres versiones de grep, menciónelas en sus comentarios.