Estoy tratando de entender la diferencia entre grep -e y grep -E. Ahora de grep manpage obtuve:

-E, –extended-regexp

Interprete PATTERN como una expresión regular extendida (ver más abajo).

-e PATTERN, –regexp = PATTERN

Use PATTERN como patrón; útil para proteger patrones que comienzan con –

La explicación anterior no tiene sentido para mí.

Entonces, ¿alguien puede explicárselo a yo usando examples ¿cuál es la diferencia entre los dos y cuándo usar qué opción?

PS: Versión: grep (GNU grep) 2.10

Comentarios

  • Ver también: unix.stackexchange.com/questions/17949/…
  • El propósito de -e es realmente eliminar la ambigüedad cuando una expresión regular comienza con un guión. Entonces, grep ---foo da unrecognized option: ---foo pero puedes decir grep -e ---foo para grep para la expresión regular ---foo.

Responder

-e es estrictamente la bandera para indicar el patrón con el que desea hacer coincidir. -E controla si necesitas escapar de ciertos caracteres especiales.

man grep explica -E es un poco más:

 Basic vs Extended Regular Expressions In basic regular expressions the meta-characters ?, +, {, |, (, and ) lose their special meaning; instead use the backslashed versions \?, \+, \{, \|, \(, and \). Traditional egrep did not support the { meta-character, and some egrep implementations support \{ instead, so portable scripts should avoid { in grep -E patterns and should use [{] to match a literal {. GNU grep -E attempts to support traditional usage by assuming that { is not special if it would be the start of an invalid interval specification. For example, the command grep -E "{1" searches for the two-character string {1 instead of reporting a syntax error in the regular expression. POSIX.2 allows this behavior as an extension, but portable scripts should avoid it. 

Comentarios

  • así que esta es la razón por la que Sí echo "hello" | grep -o -e 'h|l' No obtengo resultados porque | perdió su significado especial y cuando lo hago echo "hello" | grep -o -E 'h|l' Obtengo el resultado deseado.
  • Sí. echo "hello" | grep -o -e 'h' -e 'l' funcionará si desea deshacerse de -E en este caso.
  • grep -e -o 'h|l' coincidirá literalmente con h|l mientras que grep -e -o 'h\|l' coincidirá con h o l y con -E ' es lo contrario
  • @ronnie it ' es desafortunado que necesita más de 200 reputación para tener esa " característica " que lo siga entre los sitios SE …

Respuesta

También grep -e permite usar varias cadenas para buscar: "grep -e "abc" -e "def" -e "123" buscará cualquiera de estas tres cadenas: abc así como def y 123.

Esto funciona bastante similar a grep "abc\|def\|123" donde \| se encuentra para or pero c Debería ser un poco más claro de leer.

Como los hechos más importantes sobre grep -E ya se explican aquí, solo quiero agregar lo que resumí sobre este tema en una pregunta bastante similar: Expresión regular para encontrar caracteres dobles en Bash

Respuesta

ver más abajo

/ extendido

grep comprende tres versiones diferentes de la sintaxis de expresiones regulares: «básica», «extendida» y «perl». En GNU grep, no hay diferencia en la funcionalidad disponible entre la sintaxis básica y extendida. En otras implementaciones, las expresiones regulares básicas son menos poderosas. La siguiente descripción se aplica a las expresiones regulares extendidas; las diferencias de las expresiones regulares básicas se resumen a continuación. Las expresiones regulares de Perl brindan funcionalidad adicional y están documentadas en pcresyntax (3) y pcrepattern (3), pero pueden no estar disponibles en todos los sistemas.

Entonces , una vez más.

En GNU grep, no hay diferencia en la funcionalidad disponible entre la sintaxis básica y extendida

Comentarios

  • la funcionalidad es la misma entre básica y extendida pero la sintaxis es ligeramente diferente. regexp caracteres especiales como (, ), |, etc.necesitan escaparse de barra invertida para tienen su significado especial en las expresiones regulares básicas, pero no en las extendidas (donde deben escaparse para ser tratados como una cadena literal)

Respuesta

Solo para desarrollar la opción -e. -e suele ser opcional:

grep PATTERN 

es idéntico a

grep -e PATTERN 

a menos que, como se indicó en una Respuesta anterior y en las páginas de manual, haya múltiples patrones de búsqueda, o para proteger un patrón que comience con un guión (-).

Deja una respuesta

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