Saltar al contenido

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

Ya no tienes que buscar más por otros sitios porque llegaste al lugar perfecto, contamos con la solución que buscas sin complicaciones.

Solución:

  • egrep es 100% equivalente a grep -E
  • fgrep es 100% equivalente a grep -F

Históricamente, estos interruptores se proporcionaron en binarios separados. En algunos sistemas Unix realmente antiguos, encontrará que necesita llamar a los binarios separados, pero en todos los sistemas modernos se prefieren los conmutadores. La página man para grep tiene detalles sobre esto.

En cuanto a lo que hacen, -E cambia grep a un modo especial para que la expresión se evalúe como una ERE (expresión regular extendida) en lugar de su coincidencia de patrón normal. Los detalles de esta sintaxis se encuentran en la página del manual.

-E, --extended-regexp

Interpretar PATRÓN como una expresión regular extendida

los -F switch cambia grep a un modo diferente donde acepta un patrón para que coincida, pero luego divide ese patrón en una búsqueda string por línea y realiza una búsqueda OR en cualquiera de las cadenas sin hacer ninguna coincidencia de patrón especial.

-F, --fixed-strings

Interprete PATRÓN como una lista de cadenas fijas, separadas por líneas nuevas, cualquiera de las cuales debe coincidir.

Estos son algunos escenarios de ejemplo:

  • Tiene un archivo con una lista de, digamos, diez nombres de usuario de Unix en texto sin formato. Desea buscar el archivo de grupo en su máquina para ver si alguno de los diez usuarios enumerados está en algún grupo especial:

    grep -F -f user_list.txt /etc/group
    

    La razón por la que -F cambiar ayuda aquí es que los nombres de usuario en su archivo de patrones se interpretan como cadenas de texto sin formato. Los puntos, por ejemplo, se interpretarían como puntos en lugar de comodines.

  • Desea buscar usando una expresión elegante. Por ejemplo paréntesis () puede usarse para indicar grupos con | utilizado como un operador OR. Podría ejecutar esta búsqueda usando -E:

    grep -E '^no(fork|group)' /etc/group
    

    …para devolver líneas que comienzan con “nofork” o “nogroup”. Sin el -E cambiar, tendría que escapar de los caracteres especiales involucrados porque con la coincidencia de patrones normal, solo buscarían ese patrón exacto;

    grep '^no(fork|group)' /etc/group
    

Desde man grep:

 egrep is the same as grep -E.
 fgrep is the same as grep -F.  Direct invocation as either egrep  or  
  fgrep  is  deprecated,  but  is provided to allow historical applications
  that rely on them to run unmodified.

Tu usas fgrep o grep -F si tu no quiero el grepped string ser interpretado como un patrón.

Tu usas egrep o grep -E si necesita usar una expresión regular extendida.

egrep y fgrep son básicamente equivalentes a grep -E y grep -F (respectivamente):

   -E, --extended-regexp
          Interpret PATTERN as an extended regular  expression  (ERE,  see
          below).  (-E is specified by POSIX.)

   -F, --fixed-strings
          Interpret  PATTERN  as  a  list  of  fixed strings, separated by
          newlines, any of which is to be matched.  (-F  is  specified  by
          POSIX.)

Sin embargo, los mensajes de error pueden diferir.

Valoraciones y reseñas

Nos puedes añadir valor a nuestra información asistiendo con tu veteranía en las notas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *